@nocoo/basalt 2.1.0 → 2.1.7

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 (80) hide show
  1. package/ai/COMPATIBILITY.md +1 -1
  2. package/ai/INTEGRATION.md +17 -1
  3. package/ai/USAGE.md +1 -1
  4. package/ai/registry.json +80 -80
  5. package/dist/assets/brand-mark.d.ts +1 -1
  6. package/dist/assets/brand-mark.js +1 -1
  7. package/dist/assets/brand-mark.js.map +1 -1
  8. package/dist/charts/charts.d.ts +1 -1
  9. package/dist/charts/charts.js +3 -16
  10. package/dist/charts/charts.js.map +1 -1
  11. package/dist/charts/custom-chart.d.ts +1 -1
  12. package/dist/charts/custom-chart.js +3 -16
  13. package/dist/charts/custom-chart.js.map +1 -1
  14. package/dist/charts/grouped-bar.d.ts +1 -1
  15. package/dist/charts/grouped-bar.js +11 -48
  16. package/dist/charts/grouped-bar.js.map +1 -1
  17. package/dist/charts/heatmap-calendar.js +80 -136
  18. package/dist/charts/heatmap-calendar.js.map +1 -1
  19. package/dist/charts/slot-bar.js +2 -12
  20. package/dist/charts/slot-bar.js.map +1 -1
  21. package/dist/charts/stat-card.js +2 -7
  22. package/dist/charts/stat-card.js.map +1 -1
  23. package/dist/charts/timeseries.d.ts +1 -1
  24. package/dist/charts/timeseries.js +3 -16
  25. package/dist/charts/timeseries.js.map +1 -1
  26. package/dist/charts/tooltip.js +13 -51
  27. package/dist/charts/tooltip.js.map +1 -1
  28. package/dist/components/app-shell.js +2 -2
  29. package/dist/components/app-shell.js.map +1 -1
  30. package/dist/components/autocomplete.d.ts +1 -1
  31. package/dist/components/autocomplete.js +3 -16
  32. package/dist/components/autocomplete.js.map +1 -1
  33. package/dist/components/badge.js +6 -6
  34. package/dist/components/badge.js.map +1 -1
  35. package/dist/components/banner.js +28 -28
  36. package/dist/components/banner.js.map +1 -1
  37. package/dist/components/button.js +6 -7
  38. package/dist/components/button.js.map +1 -1
  39. package/dist/components/chat-composer.js +1 -2
  40. package/dist/components/chat-composer.js.map +1 -1
  41. package/dist/components/checkbox.js +50 -82
  42. package/dist/components/checkbox.js.map +1 -1
  43. package/dist/components/code.js +1 -1
  44. package/dist/components/code.js.map +1 -1
  45. package/dist/components/combobox.d.ts +1 -1
  46. package/dist/components/combobox.js +3 -16
  47. package/dist/components/combobox.js.map +1 -1
  48. package/dist/components/context-menu.d.ts +1 -67
  49. package/dist/components/context-menu.js.map +1 -1
  50. package/dist/components/data-table.js +111 -123
  51. package/dist/components/data-table.js.map +1 -1
  52. package/dist/components/date-picker.js +236 -245
  53. package/dist/components/date-picker.js.map +1 -1
  54. package/dist/components/dock.js +15 -16
  55. package/dist/components/dock.js.map +1 -1
  56. package/dist/components/field.js +20 -23
  57. package/dist/components/field.js.map +1 -1
  58. package/dist/components/layer-card.d.ts +1 -1
  59. package/dist/components/layer-card.js +44 -51
  60. package/dist/components/layer-card.js.map +1 -1
  61. package/dist/components/sidebar.js +3 -3
  62. package/dist/components/sidebar.js.map +1 -1
  63. package/dist/components/skeleton-line.d.ts +2 -2
  64. package/dist/components/skeleton-line.js +1 -1
  65. package/dist/components/skeleton-line.js.map +1 -1
  66. package/dist/components/switch.js +46 -78
  67. package/dist/components/switch.js.map +1 -1
  68. package/dist/providers/accent.js +89 -198
  69. package/dist/providers/accent.js.map +1 -1
  70. package/dist/providers/theme.js +46 -144
  71. package/dist/providers/theme.js.map +1 -1
  72. package/dist/styles/standalone.css +12 -24
  73. package/dist/styles/tokens.css +6 -6
  74. package/dist/utils/preference-store.d.ts +16 -0
  75. package/dist/utils/preference-store.js +106 -0
  76. package/dist/utils/preference-store.js.map +1 -0
  77. package/dist/utils/use-checkable-group.d.ts +19 -0
  78. package/dist/utils/use-checkable-group.js +61 -0
  79. package/dist/utils/use-checkable-group.js.map +1 -0
  80. package/package.json +1 -2
@@ -4,31 +4,23 @@ import { Button as t } from "./button.js";
4
4
  import { SkeletonLine as n } from "./skeleton-line.js";
5
5
  import { Pagination as r } from "./pagination.js";
6
6
  import { Table as i, TableBody as a, TableCell as o, TableHead as s, TableHeader as c, TableRow as l } from "./table.js";
7
- import { useCallback as u, useEffect as d, useLayoutEffect as f, useMemo as ee, useRef as p, useState as m } from "react";
8
- import { jsx as h, jsxs as g } from "react/jsx-runtime";
7
+ import { useCallback as u, useEffect as d, useLayoutEffect as ee, useMemo as te, useRef as f, useState as p } from "react";
8
+ import { jsx as m, jsxs as h } from "react/jsx-runtime";
9
9
  //#region src/components/data-table.tsx
10
- function _(e) {
11
- return typeof e == "bigint" ? e : typeof e == "number" && Number.isFinite(e) && Number.isInteger(e) ? BigInt(e) : null;
12
- }
13
- function v(e, t) {
14
- let n = BigInt(Math.trunc(e));
15
- return n < t ? -1 : n > t || e > Number(n) ? 1 : -1;
16
- }
17
- function y(e) {
10
+ function g(e) {
18
11
  return e === -Infinity ? 0 : typeof e == "bigint" || typeof e == "number" && Number.isFinite(e) ? 1 : e === Infinity ? 2 : typeof e == "number" ? 3 : typeof e == "string" ? 4 : 5;
19
12
  }
20
- function te(e, t) {
21
- let n = y(e), r = y(t);
13
+ function ne(e, t) {
14
+ let n = g(e), r = g(t);
22
15
  if (n !== r) return n - r;
23
16
  if (n === 1) {
24
- if (typeof e == "bigint" && typeof t == "bigint") return e < t ? -1 : +(e > t);
25
- let n = _(e), r = _(t);
26
- return n !== null && r !== null ? n < r ? -1 : +(n > r) : typeof e == "number" && typeof t == "bigint" ? v(e, t) : typeof e == "bigint" && typeof t == "number" ? -v(t, e) : e - t;
17
+ let n = e, r = t;
18
+ return n < r ? -1 : +(n > r);
27
19
  }
28
20
  let i = String(e), a = String(t);
29
21
  return i < a ? -1 : +(i > a);
30
22
  }
31
- function ne(e, t, n, r) {
23
+ function re(e, t, n, r) {
32
24
  if (e === null) return "prim:null";
33
25
  if (e === void 0) return "prim:undefined";
34
26
  if (typeof e == "symbol") {
@@ -38,225 +30,221 @@ function ne(e, t, n, r) {
38
30
  let i = typeof e;
39
31
  return i === "number" ? Object.is(e, -0) ? "prim:number:-0" : `prim:number:${String(e)}` : i === "string" || i === "bigint" || i === "boolean" ? `prim:${i}:${String(e)}` : `prim:${t}`;
40
32
  }
41
- function re(e) {
33
+ function _(e) {
42
34
  return e.startsWith("dup:") || e.startsWith("gen:");
43
35
  }
44
- function ie(e) {
45
- return e.startsWith("id:") || e.startsWith("get:");
46
- }
47
- function b(e) {
36
+ function v(e) {
48
37
  return typeof e == "function" || typeof e == "object" && !!e;
49
38
  }
50
- function ae(e, t) {
39
+ function ie(e, t) {
51
40
  if (e.filterValue) return String(e.filterValue(t));
52
41
  if (e.sortValue) return String(e.sortValue(t));
53
42
  let n = e.accessor(t);
54
43
  return typeof n == "string" || typeof n == "number" || typeof n == "bigint" ? String(n) : "";
55
44
  }
56
- function x(e, t, n, r) {
45
+ function y(e, t, n, r) {
57
46
  let i = r?.(e, t);
58
- return i === void 0 ? b(e) && "id" in e && e.id != null ? String(e.id) : n : i;
47
+ return i === void 0 ? v(e) && "id" in e && e.id != null ? String(e.id) : n : i;
59
48
  }
60
- function S({ data: _, columns: v, filter: y = "", loading: S = !1, empty: oe = "No results", selected: C, defaultSelected: w, onSelectedChange: T, multiple: se = !1, page: E, defaultPage: ce = 1, pageSize: D, onPageChange: le, getRowId: O, className: ue, sort: k, defaultSort: de = null, onSortChange: fe, manualSorting: A = !1, manualPagination: j = !1, manualFiltering: M = !1, total: N, error: P, onRetry: F, retryLabel: pe = "Try again", "aria-label": I = "Data table", "aria-describedby": me }) {
61
- let [he, ge] = m(de), L = k === void 0 ? he : k, _e = (e) => {
62
- k === void 0 && ge(e), fe?.(e);
63
- }, [ve, ye] = m(w ?? []), [R, be] = m(ce), xe = p(/* @__PURE__ */ new WeakMap()), z = p(0), B = p(/* @__PURE__ */ new WeakMap()), Se = p(/* @__PURE__ */ new Map()), V = p(/* @__PURE__ */ new Map()), H = p(/* @__PURE__ */ new Map()), U = p(/* @__PURE__ */ new Map()), Ce = p(/* @__PURE__ */ new Map()), W = y.trim().toLowerCase(), G = ee(() => {
49
+ function b({ data: g, columns: b, filter: ae = "", loading: x = !1, empty: oe = "No results", selected: S, defaultSelected: C, onSelectedChange: w, multiple: se = !1, page: T, defaultPage: ce = 1, pageSize: E, onPageChange: le, getRowId: D, className: ue, sort: O, defaultSort: de = null, onSortChange: fe, manualSorting: k = !1, manualPagination: A = !1, manualFiltering: j = !1, total: M, error: N, onRetry: P, retryLabel: pe = "Try again", "aria-label": F = "Data table", "aria-describedby": me }) {
50
+ let [he, ge] = p(de), I = O === void 0 ? he : O, _e = (e) => {
51
+ O === void 0 && ge(e), fe?.(e);
52
+ }, [ve, ye] = p(C ?? []), [L, be] = p(ce), R = f(/* @__PURE__ */ new WeakMap()), z = f(0), B = f(/* @__PURE__ */ new WeakMap()), V = f(/* @__PURE__ */ new Map()), H = f(/* @__PURE__ */ new Map()), U = f(/* @__PURE__ */ new Map()), xe = f(/* @__PURE__ */ new Map()), W = ae.trim().toLowerCase(), G = te(() => {
64
53
  let e = (e) => {
65
- let t = xe.current.get(e);
66
- return t || (t = `basalt-row-${z.current++}`, xe.current.set(e, t)), t;
54
+ let t = R.current.get(e);
55
+ return t || (t = `basalt-row-${z.current++}`, R.current.set(e, t)), t;
67
56
  }, t = (e, t) => {
68
- let n = O?.(e, t);
57
+ let n = D?.(e, t);
69
58
  if (n !== void 0) return `get:${n}`;
70
- if (b(e) && "id" in e) {
59
+ if (v(e) && "id" in e) {
71
60
  let t = e.id;
72
61
  if (t != null) return `id:${String(t)}`;
73
62
  }
74
- }, n = /* @__PURE__ */ new Set(), r = /* @__PURE__ */ new Map(), i = /* @__PURE__ */ new Map(), a = /* @__PURE__ */ new Map(), o = /* @__PURE__ */ new Map(), s = /* @__PURE__ */ new Map(), c = (e, n, c, l) => {
75
- if (!l) return;
76
- let u = a.get(l) ?? [];
77
- u.push(c), a.set(l, u), o.set(c, l), ie(c) && s.set(c, l);
78
- let d = t(e, n);
79
- if (d && (r.set(d, c), re(c))) {
80
- let e = i.get(d) ?? [];
81
- e.push(c), i.set(d, e);
63
+ }, n = /* @__PURE__ */ new Set(), r = /* @__PURE__ */ new Map(), i = /* @__PURE__ */ new Map(), a = /* @__PURE__ */ new Map(), o = /* @__PURE__ */ new Map(), s = (e, n, s, c) => {
64
+ if (!c) return;
65
+ let l = a.get(c) ?? [];
66
+ l.push(s), a.set(c, l), o.set(s, c);
67
+ let u = t(e, n);
68
+ if (u && (r.set(u, s), _(s))) {
69
+ let e = i.get(u) ?? [];
70
+ e.push(s), i.set(u, e);
82
71
  }
83
- }, l = /* @__PURE__ */ new WeakMap(), u = _.map((e, t) => {
84
- let n = b(e) ? e : null, r = n ? l.get(n) ?? 0 : 0;
85
- return n && l.set(n, r + 1), {
72
+ }, c = /* @__PURE__ */ new WeakMap(), l = g.map((e, t) => {
73
+ let n = v(e) ? e : null, r = n ? c.get(n) ?? 0 : 0;
74
+ return n && c.set(n, r + 1), {
86
75
  row: e,
87
76
  index: t,
88
77
  occurrence: r,
89
78
  key: void 0
90
79
  };
91
80
  });
92
- for (let e of u) {
93
- let t = b(e.row) ? e.row : null;
81
+ for (let e of l) {
82
+ let t = v(e.row) ? e.row : null;
94
83
  if (!t) continue;
95
84
  let r = B.current.get(t)?.[e.occurrence];
96
85
  !r || n.has(r) || V.current.get(r) === t && (e.key = r, n.add(r));
97
86
  }
98
- let d = u.map(({ row: r, index: i, occurrence: a, key: o }) => {
99
- let s = b(r) ? r : null;
100
- if (o) return c(r, i, o, s), {
87
+ let u = l.map(({ row: r, index: i, occurrence: a, key: o }) => {
88
+ let c = v(r) ? r : null;
89
+ if (o) return s(r, i, o, c), {
101
90
  row: r,
102
91
  key: o,
103
- selectId: x(r, i, o, O)
92
+ selectId: y(r, i, o, D)
104
93
  };
105
94
  let l = a > 0, u, d = t(r, i);
106
- if (d && (u = d), s) {
107
- let t = e(s);
95
+ if (d && (u = d), c) {
96
+ let t = e(c);
108
97
  if (!u) u = l ? `gen:${t}#${a}` : `gen:${t}`;
109
98
  else if (n.has(u) || l) u = (U.current.get(u) ?? []).find((e) => !n.has(e)) ?? (l ? `dup:${t}#${a}` : `dup:${t}`);
110
99
  else {
111
100
  let e = H.current.get(u);
112
- e && !n.has(e) && re(e) && (u = e);
101
+ e && !n.has(e) && _(e) && (u = e);
113
102
  }
114
103
  }
115
- if (u ??= ne(r, i, Ce.current, z), n.has(u)) {
104
+ if (u ??= re(r, i, xe.current, z), n.has(u)) {
116
105
  let e = 0, t = `occ:${u}#${e}`;
117
106
  for (; n.has(t);) e += 1, t = `occ:${u}#${e}`;
118
107
  u = t;
119
108
  }
120
- return n.add(u), c(r, i, u, s), {
109
+ return n.add(u), s(r, i, u, c), {
121
110
  row: r,
122
111
  key: u,
123
- selectId: x(r, i, u, O)
112
+ selectId: y(r, i, u, D)
124
113
  };
125
- }), f = W && !M ? d.filter(({ row: e }) => v.some((t) => ae(t, e).toLowerCase().includes(W))) : d;
114
+ }), d = W && !j ? u.filter(({ row: e }) => b.some((t) => ie(t, e).toLowerCase().includes(W))) : u;
126
115
  return {
127
116
  rows: (() => {
128
- if (!L || A) return f;
129
- let e = v.find((e) => e.id === L.id);
130
- return e ? [...f].sort((t, n) => {
131
- let r = te(e.sortValue?.(t.row) ?? e.accessor(t.row), e.sortValue?.(n.row) ?? e.accessor(n.row));
132
- return L.dir === "asc" ? r : -r;
133
- }) : f;
117
+ if (!I || k) return d;
118
+ let e = b.find((e) => e.id === I.id);
119
+ return e ? [...d].sort((t, n) => {
120
+ let r = ne(e.sortValue?.(t.row) ?? e.accessor(t.row), e.sortValue?.(n.row) ?? e.accessor(n.row));
121
+ return I.dir === "asc" ? r : -r;
122
+ }) : d;
134
123
  })(),
135
124
  assigned: a,
136
125
  owner: o,
137
- canonical: s,
138
126
  lastKey: r,
139
127
  dups: i
140
128
  };
141
129
  }, [
142
- v,
143
- _,
144
- O,
130
+ b,
131
+ g,
132
+ D,
145
133
  W,
146
- L,
147
- M,
148
- A
134
+ I,
135
+ j,
136
+ k
149
137
  ]);
150
- f(() => {
138
+ ee(() => {
151
139
  for (let [e, t] of G.assigned) B.current.set(e, t);
152
- V.current = G.owner, Se.current = G.canonical, H.current = G.lastKey, U.current = G.dups;
140
+ V.current = G.owner, H.current = G.lastKey, U.current = G.dups;
153
141
  }, [G]);
154
- let K = C !== void 0 || w !== void 0 || T !== void 0, q = C ?? ve, J = u((e) => {
155
- C === void 0 && ye(e), T?.(e);
156
- }, [T, C]), we = j && N !== void 0 ? Math.max(0, N) : G.rows.length, Te = D && D > 0 ? Math.max(1, Math.ceil(we / D)) : 1, Y = Math.min(Te, Math.max(1, E ?? R)), X = u((e) => {
157
- E === void 0 && be(e), le?.(e);
158
- }, [le, E]), Z = p(null);
142
+ let K = S !== void 0 || C !== void 0 || w !== void 0, q = S ?? ve, J = u((e) => {
143
+ S === void 0 && ye(e), w?.(e);
144
+ }, [w, S]), Se = A && M !== void 0 ? Math.max(0, M) : G.rows.length, Y = E && E > 0 ? Math.max(1, Math.ceil(Se / E)) : 1, X = Math.min(Y, Math.max(1, T ?? L)), Z = u((e) => {
145
+ T === void 0 && be(e), le?.(e);
146
+ }, [le, T]), Q = f(null);
159
147
  d(() => {
160
- let e = E ?? R;
161
- if (e === Y || S) {
162
- Z.current = null;
148
+ let e = T ?? L;
149
+ if (e === X || x) {
150
+ Q.current = null;
163
151
  return;
164
152
  }
165
- let t = `${e}:${Y}`;
166
- Z.current !== t && (Z.current = t, X(Y));
153
+ let t = `${e}:${X}`;
154
+ Q.current !== t && (Q.current = t, Z(X));
167
155
  }, [
168
- E,
169
- R,
170
- Y,
171
- S,
172
- X
156
+ T,
157
+ L,
158
+ X,
159
+ x,
160
+ Z
173
161
  ]);
174
- let Q = !j && D && D > 0 ? G.rows.slice((Y - 1) * D, Y * D) : G.rows, $ = v.length + +!!K, Ee = (e) => {
162
+ let Ce = !A && E && E > 0 ? G.rows.slice((X - 1) * E, X * E) : G.rows, $ = b.length + +!!K, we = (e) => {
175
163
  if (se) {
176
164
  J(q.includes(e) ? q.filter((t) => t !== e) : [...q, e]);
177
165
  return;
178
166
  }
179
167
  J(q.includes(e) ? [] : [e]);
180
168
  };
181
- return /* @__PURE__ */ g("div", {
169
+ return /* @__PURE__ */ h("div", {
182
170
  className: "flex min-w-0 flex-col gap-3",
183
- children: [/* @__PURE__ */ h("div", {
171
+ children: [/* @__PURE__ */ m("div", {
184
172
  role: "region",
185
- "aria-label": `${I} scroll area`,
173
+ "aria-label": `${F} scroll area`,
186
174
  tabIndex: 0,
187
175
  className: "min-w-0 overflow-x-auto rounded-basalt-md focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-basalt-primary",
188
- children: /* @__PURE__ */ g(i, {
176
+ children: /* @__PURE__ */ h(i, {
189
177
  className: e("w-full", ue),
190
- "aria-label": I,
178
+ "aria-label": F,
191
179
  "aria-describedby": me,
192
- "aria-busy": S || void 0,
193
- children: [/* @__PURE__ */ h(c, { children: /* @__PURE__ */ g(l, { children: [K ? /* @__PURE__ */ h(s, { children: /* @__PURE__ */ h("span", {
180
+ "aria-busy": x || void 0,
181
+ children: [/* @__PURE__ */ m(c, { children: /* @__PURE__ */ h(l, { children: [K ? /* @__PURE__ */ m(s, { children: /* @__PURE__ */ m("span", {
194
182
  className: "sr-only",
195
183
  children: "Select"
196
- }) }) : null, v.map((e) => /* @__PURE__ */ h(s, {
184
+ }) }) : null, b.map((e) => /* @__PURE__ */ m(s, {
197
185
  className: e.headerClassName,
198
186
  style: { width: e.width },
199
187
  scope: "col",
200
- "aria-sort": e.sortable === !1 ? void 0 : L?.id === e.id ? L.dir === "asc" ? "ascending" : "descending" : "none",
201
- children: e.sortable === !1 ? e.headerContent ?? e.header : /* @__PURE__ */ g("button", {
188
+ "aria-sort": e.sortable === !1 ? void 0 : I?.id === e.id ? I.dir === "asc" ? "ascending" : "descending" : "none",
189
+ children: e.sortable === !1 ? e.headerContent ?? e.header : /* @__PURE__ */ h("button", {
202
190
  type: "button",
203
191
  "aria-label": e.header,
204
192
  className: "appearance-none border-0 bg-transparent p-0 font-inherit text-inherit font-medium cursor-pointer rounded-sm focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-basalt-primary",
205
- onClick: () => _e(L?.id === e.id && L.dir === "asc" ? {
193
+ onClick: () => _e(I?.id === e.id && I.dir === "asc" ? {
206
194
  id: e.id,
207
195
  dir: "desc"
208
196
  } : {
209
197
  id: e.id,
210
198
  dir: "asc"
211
199
  }),
212
- children: [e.headerContent ?? e.header, L?.id === e.id ? L.dir === "asc" ? " ↑" : " ↓" : ""]
200
+ children: [e.headerContent ?? e.header, I?.id === e.id ? I.dir === "asc" ? " ↑" : " ↓" : ""]
213
201
  })
214
- }, e.id))] }) }), /* @__PURE__ */ h(a, { children: S ? /* @__PURE__ */ h(l, { children: /* @__PURE__ */ h(o, {
202
+ }, e.id))] }) }), /* @__PURE__ */ m(a, { children: x ? /* @__PURE__ */ m(l, { children: /* @__PURE__ */ m(o, {
215
203
  colSpan: $,
216
- children: /* @__PURE__ */ g("div", {
204
+ children: /* @__PURE__ */ h("div", {
217
205
  role: "status",
218
206
  className: "flex flex-col gap-2 py-2",
219
207
  children: [
220
- /* @__PURE__ */ h("span", {
208
+ /* @__PURE__ */ m("span", {
221
209
  className: "sr-only",
222
210
  children: "Loading"
223
211
  }),
224
- /* @__PURE__ */ h(n, {}),
225
- /* @__PURE__ */ h(n, {}),
226
- /* @__PURE__ */ h(n, {})
212
+ /* @__PURE__ */ m(n, {}),
213
+ /* @__PURE__ */ m(n, {}),
214
+ /* @__PURE__ */ m(n, {})
227
215
  ]
228
216
  })
229
- }) }) : P != null && P !== !1 ? /* @__PURE__ */ h(l, { children: /* @__PURE__ */ h(o, {
217
+ }) }) : N != null && N !== !1 ? /* @__PURE__ */ m(l, { children: /* @__PURE__ */ m(o, {
230
218
  colSpan: $,
231
- children: /* @__PURE__ */ g("div", {
219
+ children: /* @__PURE__ */ h("div", {
232
220
  role: "alert",
233
221
  className: "flex flex-wrap items-center justify-between gap-3 py-6",
234
- children: [/* @__PURE__ */ h("div", { children: P }), F ? /* @__PURE__ */ h(t, {
222
+ children: [/* @__PURE__ */ m("div", { children: N }), P ? /* @__PURE__ */ m(t, {
235
223
  variant: "outline",
236
224
  size: "sm",
237
- onClick: F,
225
+ onClick: P,
238
226
  children: pe
239
227
  }) : null]
240
228
  })
241
- }) }) : Q.length === 0 ? /* @__PURE__ */ h(l, { children: /* @__PURE__ */ h(o, {
229
+ }) }) : Ce.length === 0 ? /* @__PURE__ */ m(l, { children: /* @__PURE__ */ m(o, {
242
230
  colSpan: $,
243
- children: /* @__PURE__ */ h("div", {
231
+ children: /* @__PURE__ */ m("div", {
244
232
  role: "status",
245
233
  children: oe
246
234
  })
247
- }) }) : Q.map(({ row: e, key: t, selectId: n }) => {
235
+ }) }) : Ce.map(({ row: e, key: t, selectId: n }) => {
248
236
  let r = q.includes(n);
249
- return /* @__PURE__ */ g(l, {
237
+ return /* @__PURE__ */ h(l, {
250
238
  variant: r ? "selected" : "default",
251
239
  "aria-selected": K ? r : void 0,
252
- children: [K ? /* @__PURE__ */ h(o, { children: /* @__PURE__ */ h("input", {
240
+ children: [K ? /* @__PURE__ */ m(o, { children: /* @__PURE__ */ m("input", {
253
241
  type: "checkbox",
254
242
  checked: r,
255
243
  "aria-label": `Select ${n}`,
256
- onChange: () => Ee(n)
257
- }) }) : null, v.map((t) => {
244
+ onChange: () => we(n)
245
+ }) }) : null, b.map((t) => {
258
246
  let n = t.accessor(e);
259
- return /* @__PURE__ */ h(o, {
247
+ return /* @__PURE__ */ m(o, {
260
248
  className: t.cellClassName,
261
249
  children: typeof n == "bigint" ? String(n) : n
262
250
  }, t.id);
@@ -264,15 +252,15 @@ function S({ data: _, columns: v, filter: y = "", loading: S = !1, empty: oe = "
264
252
  }, t);
265
253
  }) })]
266
254
  })
267
- }), D && D > 0 ? /* @__PURE__ */ h(r, {
268
- page: Y,
269
- pageCount: Te,
270
- disabled: S,
271
- onPageChange: X
255
+ }), E && E > 0 ? /* @__PURE__ */ m(r, {
256
+ page: X,
257
+ pageCount: Y,
258
+ disabled: x,
259
+ onPageChange: Z
272
260
  }) : null]
273
261
  });
274
262
  }
275
263
  //#endregion
276
- export { S as DataTable };
264
+ export { b as DataTable };
277
265
 
278
266
  //# sourceMappingURL=data-table.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"data-table.js","names":[],"sources":["../../src/components/data-table.tsx"],"sourcesContent":["import {\n\ttype CSSProperties,\n\ttype ReactNode,\n\tuseCallback,\n\tuseEffect,\n\tuseLayoutEffect,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n} from \"react\";\nimport { cn } from \"../utils/cn\";\nimport { Button } from \"./button\";\nimport { Pagination } from \"./pagination\";\nimport { SkeletonLine } from \"./skeleton-line\";\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from \"./table\";\n\nexport type DataTableColumn<T> = {\n\tid: string;\n\theader: string;\n\taccessor: (row: T) => ReactNode;\n\tsortValue?: (row: T) => string | number | bigint;\n\tfilterValue?: (row: T) => string | number | bigint;\n\t/** Rich header content; header remains the plain text accessible name. */\n\theaderContent?: ReactNode;\n\t/** Whether the header changes sorting. @default true */\n\tsortable?: boolean;\n\t/** Width of the header and its column. */\n\twidth?: CSSProperties[\"width\"];\n\t/** Classes applied to the header cell. */\n\theaderClassName?: string;\n\t/** Classes applied to each data cell. */\n\tcellClassName?: string;\n};\n\nexport type DataTableSort = { id: string; dir: \"asc\" | \"desc\" };\n\nfunction asBigint(value: unknown): bigint | null {\n\tif (typeof value === \"bigint\") {\n\t\treturn value;\n\t}\n\tif (typeof value === \"number\" && Number.isFinite(value) && Number.isInteger(value)) {\n\t\treturn BigInt(value);\n\t}\n\treturn null;\n}\n\nfunction compareNumberAndBigint(num: number, big: bigint): number {\n\tconst truncated = BigInt(Math.trunc(num));\n\tif (truncated < big) {\n\t\treturn -1;\n\t}\n\tif (truncated > big) {\n\t\treturn 1;\n\t}\n\treturn num > Number(truncated) ? 1 : -1;\n}\n\nfunction rank(value: unknown): number {\n\tif (value === Number.NEGATIVE_INFINITY) {\n\t\treturn 0;\n\t}\n\tif (typeof value === \"bigint\" || (typeof value === \"number\" && Number.isFinite(value))) {\n\t\treturn 1;\n\t}\n\tif (value === Number.POSITIVE_INFINITY) {\n\t\treturn 2;\n\t}\n\tif (typeof value === \"number\") {\n\t\treturn 3;\n\t}\n\tif (typeof value === \"string\") {\n\t\treturn 4;\n\t}\n\treturn 5;\n}\n\nfunction compareUnknown(left: unknown, right: unknown): number {\n\tconst leftRank = rank(left);\n\tconst rightRank = rank(right);\n\tif (leftRank !== rightRank) {\n\t\treturn leftRank - rightRank;\n\t}\n\tif (leftRank === 1) {\n\t\tif (typeof left === \"bigint\" && typeof right === \"bigint\") {\n\t\t\treturn left < right ? -1 : left > right ? 1 : 0;\n\t\t}\n\t\tconst leftInt = asBigint(left);\n\t\tconst rightInt = asBigint(right);\n\t\tif (leftInt !== null && rightInt !== null) {\n\t\t\treturn leftInt < rightInt ? -1 : leftInt > rightInt ? 1 : 0;\n\t\t}\n\t\tif (typeof left === \"number\" && typeof right === \"bigint\") {\n\t\t\treturn compareNumberAndBigint(left, right);\n\t\t}\n\t\tif (typeof left === \"bigint\" && typeof right === \"number\") {\n\t\t\treturn -compareNumberAndBigint(right, left);\n\t\t}\n\t\treturn (left as number) - (right as number);\n\t}\n\tconst leftStr = String(left);\n\tconst rightStr = String(right);\n\treturn leftStr < rightStr ? -1 : leftStr > rightStr ? 1 : 0;\n}\n\nfunction primitiveKey(\n\trow: unknown,\n\tindex: number,\n\tsymbols: Map<symbol, string>,\n\tseq: { current: number },\n): string {\n\tif (row === null) {\n\t\treturn \"prim:null\";\n\t}\n\tif (row === undefined) {\n\t\treturn \"prim:undefined\";\n\t}\n\tif (typeof row === \"symbol\") {\n\t\tlet key = symbols.get(row);\n\t\tif (!key) {\n\t\t\tkey = `prim:symbol:${seq.current++}`;\n\t\t\tsymbols.set(row, key);\n\t\t}\n\t\treturn key;\n\t}\n\tconst type = typeof row;\n\tif (type === \"number\") {\n\t\tif (Object.is(row, -0)) {\n\t\t\treturn \"prim:number:-0\";\n\t\t}\n\t\treturn `prim:number:${String(row)}`;\n\t}\n\tif (type === \"string\" || type === \"bigint\" || type === \"boolean\") {\n\t\treturn `prim:${type}:${String(row)}`;\n\t}\n\treturn `prim:${index}`;\n}\n\nfunction isInstanceKey(key: string) {\n\treturn key.startsWith(\"dup:\") || key.startsWith(\"gen:\");\n}\n\nfunction isCanonicalKey(key: string) {\n\treturn key.startsWith(\"id:\") || key.startsWith(\"get:\");\n}\n\nfunction isRefRow(row: unknown): row is object {\n\treturn typeof row === \"function\" || (typeof row === \"object\" && row !== null);\n}\n\nfunction filterSource<T>(column: DataTableColumn<T>, row: T): string {\n\tif (column.filterValue) {\n\t\treturn String(column.filterValue(row));\n\t}\n\tif (column.sortValue) {\n\t\treturn String(column.sortValue(row));\n\t}\n\tconst rendered = column.accessor(row);\n\tif (\n\t\ttypeof rendered === \"string\" ||\n\t\ttypeof rendered === \"number\" ||\n\t\ttypeof rendered === \"bigint\"\n\t) {\n\t\treturn String(rendered);\n\t}\n\treturn \"\";\n}\n\nfunction publicSelectId<T>(\n\trow: T,\n\tindex: number,\n\tkey: string,\n\tgetRowId?: (row: T, index: number) => string,\n): string {\n\tconst requested = getRowId?.(row, index);\n\tif (requested !== undefined) {\n\t\treturn requested;\n\t}\n\tif (isRefRow(row) && \"id\" in row && row.id != null) {\n\t\treturn String(row.id);\n\t}\n\treturn key;\n}\n\nexport type DataTableProps<T = unknown> = {\n\t/**\n\t * Rows to render.\n\t */\n\tdata: T[];\n\t/**\n\t * Column descriptors.\n\t */\n\tcolumns: DataTableColumn<T>[];\n\t/**\n\t * Filter query matched against column values.\n\t * @default \"\"\n\t */\n\tfilter?: string;\n\t/**\n\t * Replace rows with a loading placeholder.\n\t * @default false\n\t */\n\tloading?: boolean;\n\t/**\n\t * Copy shown when no rows remain after filtering.\n\t * @default \"No results\"\n\t */\n\tempty?: ReactNode;\n\t/**\n\t * Controlled selected row ids.\n\t */\n\tselected?: string[];\n\t/**\n\t * Uncontrolled initial selected row ids.\n\t */\n\tdefaultSelected?: string[];\n\t/**\n\t * Called when selected row ids change.\n\t */\n\tonSelectedChange?: (ids: string[]) => void;\n\t/**\n\t * Allow more than one selected row.\n\t * @default false\n\t */\n\tmultiple?: boolean;\n\t/**\n\t * Controlled 1-based page. Used with pageSize.\n\t */\n\tpage?: number;\n\t/**\n\t * Uncontrolled initial page.\n\t * @default 1\n\t */\n\tdefaultPage?: number;\n\t/**\n\t * Rows per page. Omit to show every row.\n\t */\n\tpageSize?: number;\n\t/**\n\t * Called when the page changes.\n\t */\n\tonPageChange?: (page: number) => void;\n\t/**\n\t * Stable id for a row.\n\t */\n\tgetRowId?: (row: T, index: number) => string;\n\t/**\n\t * Additional classes for the table.\n\t */\n\tclassName?: string;\n\t/** Controlled sorting. null explicitly disables sorting. */\n\tsort?: DataTableSort | null;\n\t/** Initial sorting for uncontrolled usage. @default null */\n\tdefaultSort?: DataTableSort | null;\n\t/** Reports header sorting requests. Controlled values change only when the caller accepts. */\n\tonSortChange?: (sort: DataTableSort | null) => void;\n\t/** Caller supplies sorted rows; headers only report requests. @default false */\n\tmanualSorting?: boolean;\n\t/** Caller supplies the current page; rows are never sliced again. Use stable row IDs across pages. @default false */\n\tmanualPagination?: boolean;\n\t/** Caller supplies filtered rows; filter is not applied locally. @default false */\n\tmanualFiltering?: boolean;\n\t/** Total matching row count in manualPagination mode; defaults to data.length. */\n\ttotal?: number;\n\t/** Error content replacing rows after loading finishes. */\n\terror?: ReactNode;\n\t/** Optional retry action for an error. The caller owns the request. */\n\tonRetry?: () => void;\n\t/** Retry button text. @default \"Try again\" */\n\tretryLabel?: string;\n\t/** Accessible table name. @default \"Data table\" */\n\t\"aria-label\"?: string;\n\t/** ID of additional table instructions or summary. */\n\t\"aria-describedby\"?: string;\n};\n\nexport function DataTable<T>({\n\tdata,\n\tcolumns,\n\tfilter = \"\",\n\tloading = false,\n\tempty = \"No results\",\n\tselected,\n\tdefaultSelected,\n\tonSelectedChange,\n\tmultiple = false,\n\tpage,\n\tdefaultPage = 1,\n\tpageSize,\n\tonPageChange,\n\tgetRowId,\n\tclassName,\n\tsort: controlledSort,\n\tdefaultSort = null,\n\tonSortChange,\n\tmanualSorting = false,\n\tmanualPagination = false,\n\tmanualFiltering = false,\n\ttotal,\n\terror,\n\tonRetry,\n\tretryLabel = \"Try again\",\n\t\"aria-label\": ariaLabel = \"Data table\",\n\t\"aria-describedby\": ariaDescribedBy,\n}: DataTableProps<T>) {\n\tconst [uncontrolledSort, setUncontrolledSort] = useState<DataTableSort | null>(defaultSort);\n\tconst sort = controlledSort === undefined ? uncontrolledSort : controlledSort;\n\tconst requestSort = (next: DataTableSort) => {\n\t\tif (controlledSort === undefined) setUncontrolledSort(next);\n\t\tonSortChange?.(next);\n\t};\n\tconst [uncontrolledSelected, setUncontrolledSelected] = useState<string[]>(defaultSelected ?? []);\n\tconst [uncontrolledPage, setUncontrolledPage] = useState(defaultPage);\n\tconst rowIds = useRef(new WeakMap<object, string>());\n\tconst rowSeq = useRef(0);\n\tconst assignedKeys = useRef(new WeakMap<object, string[]>());\n\tconst lastCanonical = useRef(new Map<string, object>());\n\tconst lastOwner = useRef(new Map<string, object>());\n\tconst lastKeyByCanonical = useRef(new Map<string, string>());\n\tconst lastDupsByCanonical = useRef(new Map<string, string[]>());\n\tconst symbolKeys = useRef(new Map<symbol, string>());\n\tconst query = filter.trim().toLowerCase();\n\n\tconst rows = useMemo(() => {\n\t\tconst identityOf = (row: object) => {\n\t\t\tlet stored = rowIds.current.get(row);\n\t\t\tif (!stored) {\n\t\t\t\tstored = `basalt-row-${rowSeq.current++}`;\n\t\t\t\trowIds.current.set(row, stored);\n\t\t\t}\n\t\t\treturn stored;\n\t\t};\n\t\tconst canonicalOf = (row: T, index: number) => {\n\t\t\tconst requested = getRowId?.(row, index);\n\t\t\tif (requested !== undefined) {\n\t\t\t\treturn `get:${requested}`;\n\t\t\t}\n\t\t\tif (isRefRow(row) && \"id\" in row) {\n\t\t\t\tconst raw = (row as { id: unknown }).id;\n\t\t\t\tif (raw != null) {\n\t\t\t\t\treturn `id:${String(raw)}`;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tconst used = new Set<string>();\n\t\tconst nextLastKey = new Map<string, string>();\n\t\tconst nextDups = new Map<string, string[]>();\n\t\tconst nextAssigned = new Map<object, string[]>();\n\t\tconst nextOwner = new Map<string, object>();\n\t\tconst nextCanonical = new Map<string, object>();\n\t\tconst rememberKey = (row: T, index: number, key: string, objectRow: object | null) => {\n\t\t\tif (!objectRow) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst list = nextAssigned.get(objectRow) ?? [];\n\t\t\tlist.push(key);\n\t\t\tnextAssigned.set(objectRow, list);\n\t\t\tnextOwner.set(key, objectRow);\n\t\t\tif (isCanonicalKey(key)) {\n\t\t\t\tnextCanonical.set(key, objectRow);\n\t\t\t}\n\t\t\tconst canonical = canonicalOf(row, index);\n\t\t\tif (!canonical) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tnextLastKey.set(canonical, key);\n\t\t\tif (isInstanceKey(key)) {\n\t\t\t\tconst dups = nextDups.get(canonical) ?? [];\n\t\t\t\tdups.push(key);\n\t\t\t\tnextDups.set(canonical, dups);\n\t\t\t}\n\t\t};\n\t\tconst counts = new WeakMap<object, number>();\n\t\tconst pending = data.map((row, index) => {\n\t\t\tconst objectRow = isRefRow(row) ? row : null;\n\t\t\tconst occurrence = objectRow ? (counts.get(objectRow) ?? 0) : 0;\n\t\t\tif (objectRow) {\n\t\t\t\tcounts.set(objectRow, occurrence + 1);\n\t\t\t}\n\t\t\treturn {\n\t\t\t\trow,\n\t\t\t\tindex,\n\t\t\t\toccurrence,\n\t\t\t\tkey: undefined as string | undefined,\n\t\t\t};\n\t\t});\n\t\tfor (const item of pending) {\n\t\t\tconst objectRow = isRefRow(item.row) ? item.row : null;\n\t\t\tif (!objectRow) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst previous = assignedKeys.current.get(objectRow)?.[item.occurrence];\n\t\t\tif (!previous || used.has(previous)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (lastOwner.current.get(previous) === objectRow) {\n\t\t\t\titem.key = previous;\n\t\t\t\tused.add(previous);\n\t\t\t}\n\t\t}\n\t\tconst keyed = pending.map(({ row, index, occurrence, key: reserved }) => {\n\t\t\tconst objectRow = isRefRow(row) ? row : null;\n\t\t\tif (reserved) {\n\t\t\t\trememberKey(row, index, reserved, objectRow);\n\t\t\t\treturn {\n\t\t\t\t\trow,\n\t\t\t\t\tkey: reserved,\n\t\t\t\t\tselectId: publicSelectId(row, index, reserved, getRowId),\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst isRepeat = occurrence > 0;\n\t\t\tlet key: string | undefined;\n\t\t\tconst requested = canonicalOf(row, index);\n\t\t\tif (requested) {\n\t\t\t\tkey = requested;\n\t\t\t}\n\t\t\tif (objectRow) {\n\t\t\t\tconst stored = identityOf(objectRow);\n\t\t\t\tif (!key) {\n\t\t\t\t\tkey = isRepeat ? `gen:${stored}#${occurrence}` : `gen:${stored}`;\n\t\t\t\t} else if (used.has(key) || isRepeat) {\n\t\t\t\t\tconst reused = (lastDupsByCanonical.current.get(key) ?? []).find(\n\t\t\t\t\t\t(candidate) => !used.has(candidate),\n\t\t\t\t\t);\n\t\t\t\t\tkey = reused ?? (isRepeat ? `dup:${stored}#${occurrence}` : `dup:${stored}`);\n\t\t\t\t} else {\n\t\t\t\t\tconst inherited = lastKeyByCanonical.current.get(key);\n\t\t\t\t\tif (inherited && !used.has(inherited) && isInstanceKey(inherited)) {\n\t\t\t\t\t\tkey = inherited;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tkey = key ?? primitiveKey(row, index, symbolKeys.current, rowSeq);\n\t\t\tif (used.has(key)) {\n\t\t\t\tlet n = 0;\n\t\t\t\tlet candidate = `occ:${key}#${n}`;\n\t\t\t\twhile (used.has(candidate)) {\n\t\t\t\t\tn += 1;\n\t\t\t\t\tcandidate = `occ:${key}#${n}`;\n\t\t\t\t}\n\t\t\t\tkey = candidate;\n\t\t\t}\n\t\t\tused.add(key);\n\t\t\trememberKey(row, index, key, objectRow);\n\t\t\treturn { row, key, selectId: publicSelectId(row, index, key, getRowId) };\n\t\t});\n\t\tconst filtered =\n\t\t\tquery && !manualFiltering\n\t\t\t\t? keyed.filter(({ row }) =>\n\t\t\t\t\t\tcolumns.some((column) => filterSource(column, row).toLowerCase().includes(query)),\n\t\t\t\t\t)\n\t\t\t\t: keyed;\n\t\tconst sorted = (() => {\n\t\t\tif (!sort || manualSorting) {\n\t\t\t\treturn filtered;\n\t\t\t}\n\t\t\tconst column = columns.find((item) => item.id === sort.id);\n\t\t\tif (!column) {\n\t\t\t\treturn filtered;\n\t\t\t}\n\t\t\treturn [...filtered].sort((a, b) => {\n\t\t\t\tconst left = column.sortValue?.(a.row) ?? column.accessor(a.row);\n\t\t\t\tconst right = column.sortValue?.(b.row) ?? column.accessor(b.row);\n\t\t\t\tconst cmp = compareUnknown(left, right);\n\t\t\t\treturn sort.dir === \"asc\" ? cmp : -cmp;\n\t\t\t});\n\t\t})();\n\t\treturn {\n\t\t\trows: sorted,\n\t\t\tassigned: nextAssigned,\n\t\t\towner: nextOwner,\n\t\t\tcanonical: nextCanonical,\n\t\t\tlastKey: nextLastKey,\n\t\t\tdups: nextDups,\n\t\t};\n\t}, [columns, data, getRowId, query, sort, manualFiltering, manualSorting]);\n\n\tuseLayoutEffect(() => {\n\t\tfor (const [objectRow, keys] of rows.assigned) {\n\t\t\tassignedKeys.current.set(objectRow, keys);\n\t\t}\n\t\tlastOwner.current = rows.owner;\n\t\tlastCanonical.current = rows.canonical;\n\t\tlastKeyByCanonical.current = rows.lastKey;\n\t\tlastDupsByCanonical.current = rows.dups;\n\t}, [rows]);\n\n\tconst selectable =\n\t\tselected !== undefined || defaultSelected !== undefined || onSelectedChange !== undefined;\n\tconst selectedIds = selected ?? uncontrolledSelected;\n\tconst setSelectedIds = useCallback(\n\t\t(next: string[]) => {\n\t\t\tif (selected === undefined) {\n\t\t\t\tsetUncontrolledSelected(next);\n\t\t\t}\n\t\t\tonSelectedChange?.(next);\n\t\t},\n\t\t[onSelectedChange, selected],\n\t);\n\tconst rowCount = manualPagination && total !== undefined ? Math.max(0, total) : rows.rows.length;\n\tconst pageCount = pageSize && pageSize > 0 ? Math.max(1, Math.ceil(rowCount / pageSize)) : 1;\n\tconst resolvedPage = Math.min(pageCount, Math.max(1, page ?? uncontrolledPage));\n\tconst setResolvedPage = useCallback(\n\t\t(next: number) => {\n\t\t\tif (page === undefined) {\n\t\t\t\tsetUncontrolledPage(next);\n\t\t\t}\n\t\t\tonPageChange?.(next);\n\t\t},\n\t\t[onPageChange, page],\n\t);\n\tconst lastCorrection = useRef<string | null>(null);\n\tuseEffect(() => {\n\t\tconst requested = page ?? uncontrolledPage;\n\t\tif (requested === resolvedPage || loading) {\n\t\t\tlastCorrection.current = null;\n\t\t\treturn;\n\t\t}\n\t\tconst correction = `${requested}:${resolvedPage}`;\n\t\tif (lastCorrection.current !== correction) {\n\t\t\tlastCorrection.current = correction;\n\t\t\tsetResolvedPage(resolvedPage);\n\t\t}\n\t}, [page, uncontrolledPage, resolvedPage, loading, setResolvedPage]);\n\tconst paged =\n\t\t!manualPagination && pageSize && pageSize > 0\n\t\t\t? rows.rows.slice((resolvedPage - 1) * pageSize, resolvedPage * pageSize)\n\t\t\t: rows.rows;\n\tconst colCount = columns.length + (selectable ? 1 : 0);\n\tconst toggleSelected = (id: string) => {\n\t\tif (multiple) {\n\t\t\tsetSelectedIds(\n\t\t\t\tselectedIds.includes(id) ? selectedIds.filter((item) => item !== id) : [...selectedIds, id],\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tsetSelectedIds(selectedIds.includes(id) ? [] : [id]);\n\t};\n\n\treturn (\n\t\t<div className=\"flex min-w-0 flex-col gap-3\">\n\t\t\t<div\n\t\t\t\trole=\"region\"\n\t\t\t\taria-label={`${ariaLabel} scroll area`}\n\t\t\t\t// biome-ignore lint/a11y/noNoninteractiveTabindex: Named overflow regions need keyboard scrolling.\n\t\t\t\ttabIndex={0}\n\t\t\t\tclassName=\"min-w-0 overflow-x-auto rounded-basalt-md focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-basalt-primary\"\n\t\t\t>\n\t\t\t\t<Table\n\t\t\t\t\tclassName={cn(\"w-full\", className)}\n\t\t\t\t\taria-label={ariaLabel}\n\t\t\t\t\taria-describedby={ariaDescribedBy}\n\t\t\t\t\taria-busy={loading || undefined}\n\t\t\t\t>\n\t\t\t\t\t<TableHeader>\n\t\t\t\t\t\t<TableRow>\n\t\t\t\t\t\t\t{selectable ? (\n\t\t\t\t\t\t\t\t<TableHead>\n\t\t\t\t\t\t\t\t\t<span className=\"sr-only\">Select</span>\n\t\t\t\t\t\t\t\t</TableHead>\n\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t{columns.map((column) => (\n\t\t\t\t\t\t\t\t<TableHead\n\t\t\t\t\t\t\t\t\tkey={column.id}\n\t\t\t\t\t\t\t\t\tclassName={column.headerClassName}\n\t\t\t\t\t\t\t\t\tstyle={{ width: column.width }}\n\t\t\t\t\t\t\t\t\tscope=\"col\"\n\t\t\t\t\t\t\t\t\taria-sort={\n\t\t\t\t\t\t\t\t\t\tcolumn.sortable === false\n\t\t\t\t\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t\t\t\t\t: sort?.id === column.id\n\t\t\t\t\t\t\t\t\t\t\t\t? sort.dir === \"asc\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t? \"ascending\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t: \"descending\"\n\t\t\t\t\t\t\t\t\t\t\t\t: \"none\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{column.sortable === false ? (\n\t\t\t\t\t\t\t\t\t\t(column.headerContent ?? column.header)\n\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\taria-label={column.header}\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"appearance-none border-0 bg-transparent p-0 font-inherit text-inherit font-medium cursor-pointer rounded-sm focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-basalt-primary\"\n\t\t\t\t\t\t\t\t\t\t\tonClick={() =>\n\t\t\t\t\t\t\t\t\t\t\t\trequestSort(\n\t\t\t\t\t\t\t\t\t\t\t\t\tsort?.id === column.id && sort.dir === \"asc\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? { id: column.id, dir: \"desc\" }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: { id: column.id, dir: \"asc\" },\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{column.headerContent ?? column.header}\n\t\t\t\t\t\t\t\t\t\t\t{sort?.id === column.id ? (sort.dir === \"asc\" ? \" ↑\" : \" ↓\") : \"\"}\n\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</TableHead>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t</TableHeader>\n\t\t\t\t\t<TableBody>\n\t\t\t\t\t\t{loading ? (\n\t\t\t\t\t\t\t<TableRow>\n\t\t\t\t\t\t\t\t<TableCell colSpan={colCount}>\n\t\t\t\t\t\t\t\t\t<div role=\"status\" className=\"flex flex-col gap-2 py-2\">\n\t\t\t\t\t\t\t\t\t\t<span className=\"sr-only\">Loading</span>\n\t\t\t\t\t\t\t\t\t\t<SkeletonLine />\n\t\t\t\t\t\t\t\t\t\t<SkeletonLine />\n\t\t\t\t\t\t\t\t\t\t<SkeletonLine />\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t\t) : error != null && error !== false ? (\n\t\t\t\t\t\t\t<TableRow>\n\t\t\t\t\t\t\t\t<TableCell colSpan={colCount}>\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\trole=\"alert\"\n\t\t\t\t\t\t\t\t\t\tclassName=\"flex flex-wrap items-center justify-between gap-3 py-6\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<div>{error}</div>\n\t\t\t\t\t\t\t\t\t\t{onRetry ? (\n\t\t\t\t\t\t\t\t\t\t\t<Button variant=\"outline\" size=\"sm\" onClick={onRetry}>\n\t\t\t\t\t\t\t\t\t\t\t\t{retryLabel}\n\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t\t) : paged.length === 0 ? (\n\t\t\t\t\t\t\t<TableRow>\n\t\t\t\t\t\t\t\t<TableCell colSpan={colCount}>\n\t\t\t\t\t\t\t\t\t<div role=\"status\">{empty}</div>\n\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\tpaged.map(({ row, key, selectId }) => {\n\t\t\t\t\t\t\t\tconst isSelected = selectedIds.includes(selectId);\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<TableRow\n\t\t\t\t\t\t\t\t\t\tkey={key}\n\t\t\t\t\t\t\t\t\t\tvariant={isSelected ? \"selected\" : \"default\"}\n\t\t\t\t\t\t\t\t\t\taria-selected={selectable ? isSelected : undefined}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{selectable ? (\n\t\t\t\t\t\t\t\t\t\t\t<TableCell>\n\t\t\t\t\t\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tchecked={isSelected}\n\t\t\t\t\t\t\t\t\t\t\t\t\taria-label={`Select ${selectId}`}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonChange={() => toggleSelected(selectId)}\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t\t\t{columns.map((column) => {\n\t\t\t\t\t\t\t\t\t\t\tconst cell = column.accessor(row);\n\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t<TableCell key={column.id} className={column.cellClassName}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{typeof cell === \"bigint\" ? String(cell) : cell}\n\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t)}\n\t\t\t\t\t</TableBody>\n\t\t\t\t</Table>\n\t\t\t</div>\n\t\t\t{pageSize && pageSize > 0 ? (\n\t\t\t\t<Pagination\n\t\t\t\t\tpage={resolvedPage}\n\t\t\t\t\tpageCount={pageCount}\n\t\t\t\t\tdisabled={loading}\n\t\t\t\t\tonPageChange={setResolvedPage}\n\t\t\t\t/>\n\t\t\t) : null}\n\t\t</div>\n\t);\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"data-table.js","names":[],"sources":["../../src/components/data-table.tsx"],"sourcesContent":["import {\n\ttype CSSProperties,\n\ttype ReactNode,\n\tuseCallback,\n\tuseEffect,\n\tuseLayoutEffect,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n} from \"react\";\nimport { cn } from \"../utils/cn\";\nimport { Button } from \"./button\";\nimport { Pagination } from \"./pagination\";\nimport { SkeletonLine } from \"./skeleton-line\";\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from \"./table\";\n\nexport type DataTableColumn<T> = {\n\tid: string;\n\theader: string;\n\taccessor: (row: T) => ReactNode;\n\tsortValue?: (row: T) => string | number | bigint;\n\tfilterValue?: (row: T) => string | number | bigint;\n\t/** Rich header content; header remains the plain text accessible name. */\n\theaderContent?: ReactNode;\n\t/** Whether the header changes sorting. @default true */\n\tsortable?: boolean;\n\t/** Width of the header and its column. */\n\twidth?: CSSProperties[\"width\"];\n\t/** Classes applied to the header cell. */\n\theaderClassName?: string;\n\t/** Classes applied to each data cell. */\n\tcellClassName?: string;\n};\n\nexport type DataTableSort = { id: string; dir: \"asc\" | \"desc\" };\n\nfunction rank(value: unknown): number {\n\tif (value === Number.NEGATIVE_INFINITY) {\n\t\treturn 0;\n\t}\n\tif (typeof value === \"bigint\" || (typeof value === \"number\" && Number.isFinite(value))) {\n\t\treturn 1;\n\t}\n\tif (value === Number.POSITIVE_INFINITY) {\n\t\treturn 2;\n\t}\n\tif (typeof value === \"number\") {\n\t\treturn 3;\n\t}\n\tif (typeof value === \"string\") {\n\t\treturn 4;\n\t}\n\treturn 5;\n}\n\nfunction compareUnknown(left: unknown, right: unknown): number {\n\tconst leftRank = rank(left);\n\tconst rightRank = rank(right);\n\tif (leftRank !== rightRank) {\n\t\treturn leftRank - rightRank;\n\t}\n\tif (leftRank === 1) {\n\t\tconst a = left as number | bigint;\n\t\tconst b = right as number | bigint;\n\t\treturn a < b ? -1 : a > b ? 1 : 0;\n\t}\n\tconst leftStr = String(left);\n\tconst rightStr = String(right);\n\treturn leftStr < rightStr ? -1 : leftStr > rightStr ? 1 : 0;\n}\n\nfunction primitiveKey(\n\trow: unknown,\n\tindex: number,\n\tsymbols: Map<symbol, string>,\n\tseq: { current: number },\n): string {\n\tif (row === null) {\n\t\treturn \"prim:null\";\n\t}\n\tif (row === undefined) {\n\t\treturn \"prim:undefined\";\n\t}\n\tif (typeof row === \"symbol\") {\n\t\tlet key = symbols.get(row);\n\t\tif (!key) {\n\t\t\tkey = `prim:symbol:${seq.current++}`;\n\t\t\tsymbols.set(row, key);\n\t\t}\n\t\treturn key;\n\t}\n\tconst type = typeof row;\n\tif (type === \"number\") {\n\t\tif (Object.is(row, -0)) {\n\t\t\treturn \"prim:number:-0\";\n\t\t}\n\t\treturn `prim:number:${String(row)}`;\n\t}\n\tif (type === \"string\" || type === \"bigint\" || type === \"boolean\") {\n\t\treturn `prim:${type}:${String(row)}`;\n\t}\n\treturn `prim:${index}`;\n}\n\nfunction isInstanceKey(key: string) {\n\treturn key.startsWith(\"dup:\") || key.startsWith(\"gen:\");\n}\n\nfunction isRefRow(row: unknown): row is object {\n\treturn typeof row === \"function\" || (typeof row === \"object\" && row !== null);\n}\n\nfunction filterSource<T>(column: DataTableColumn<T>, row: T): string {\n\tif (column.filterValue) {\n\t\treturn String(column.filterValue(row));\n\t}\n\tif (column.sortValue) {\n\t\treturn String(column.sortValue(row));\n\t}\n\tconst rendered = column.accessor(row);\n\tif (\n\t\ttypeof rendered === \"string\" ||\n\t\ttypeof rendered === \"number\" ||\n\t\ttypeof rendered === \"bigint\"\n\t) {\n\t\treturn String(rendered);\n\t}\n\treturn \"\";\n}\n\nfunction publicSelectId<T>(\n\trow: T,\n\tindex: number,\n\tkey: string,\n\tgetRowId?: (row: T, index: number) => string,\n): string {\n\tconst requested = getRowId?.(row, index);\n\tif (requested !== undefined) {\n\t\treturn requested;\n\t}\n\tif (isRefRow(row) && \"id\" in row && row.id != null) {\n\t\treturn String(row.id);\n\t}\n\treturn key;\n}\n\nexport type DataTableProps<T = unknown> = {\n\t/**\n\t * Rows to render.\n\t */\n\tdata: T[];\n\t/**\n\t * Column descriptors.\n\t */\n\tcolumns: DataTableColumn<T>[];\n\t/**\n\t * Filter query matched against column values.\n\t * @default \"\"\n\t */\n\tfilter?: string;\n\t/**\n\t * Replace rows with a loading placeholder.\n\t * @default false\n\t */\n\tloading?: boolean;\n\t/**\n\t * Copy shown when no rows remain after filtering.\n\t * @default \"No results\"\n\t */\n\tempty?: ReactNode;\n\t/**\n\t * Controlled selected row ids.\n\t */\n\tselected?: string[];\n\t/**\n\t * Uncontrolled initial selected row ids.\n\t */\n\tdefaultSelected?: string[];\n\t/**\n\t * Called when selected row ids change.\n\t */\n\tonSelectedChange?: (ids: string[]) => void;\n\t/**\n\t * Allow more than one selected row.\n\t * @default false\n\t */\n\tmultiple?: boolean;\n\t/**\n\t * Controlled 1-based page. Used with pageSize.\n\t */\n\tpage?: number;\n\t/**\n\t * Uncontrolled initial page.\n\t * @default 1\n\t */\n\tdefaultPage?: number;\n\t/**\n\t * Rows per page. Omit to show every row.\n\t */\n\tpageSize?: number;\n\t/**\n\t * Called when the page changes.\n\t */\n\tonPageChange?: (page: number) => void;\n\t/**\n\t * Stable id for a row.\n\t */\n\tgetRowId?: (row: T, index: number) => string;\n\t/**\n\t * Additional classes for the table.\n\t */\n\tclassName?: string;\n\t/** Controlled sorting. null explicitly disables sorting. */\n\tsort?: DataTableSort | null;\n\t/** Initial sorting for uncontrolled usage. @default null */\n\tdefaultSort?: DataTableSort | null;\n\t/** Reports header sorting requests. Controlled values change only when the caller accepts. */\n\tonSortChange?: (sort: DataTableSort | null) => void;\n\t/** Caller supplies sorted rows; headers only report requests. @default false */\n\tmanualSorting?: boolean;\n\t/** Caller supplies the current page; rows are never sliced again. Use stable row IDs across pages. @default false */\n\tmanualPagination?: boolean;\n\t/** Caller supplies filtered rows; filter is not applied locally. @default false */\n\tmanualFiltering?: boolean;\n\t/** Total matching row count in manualPagination mode; defaults to data.length. */\n\ttotal?: number;\n\t/** Error content replacing rows after loading finishes. */\n\terror?: ReactNode;\n\t/** Optional retry action for an error. The caller owns the request. */\n\tonRetry?: () => void;\n\t/** Retry button text. @default \"Try again\" */\n\tretryLabel?: string;\n\t/** Accessible table name. @default \"Data table\" */\n\t\"aria-label\"?: string;\n\t/** ID of additional table instructions or summary. */\n\t\"aria-describedby\"?: string;\n};\n\nexport function DataTable<T>({\n\tdata,\n\tcolumns,\n\tfilter = \"\",\n\tloading = false,\n\tempty = \"No results\",\n\tselected,\n\tdefaultSelected,\n\tonSelectedChange,\n\tmultiple = false,\n\tpage,\n\tdefaultPage = 1,\n\tpageSize,\n\tonPageChange,\n\tgetRowId,\n\tclassName,\n\tsort: controlledSort,\n\tdefaultSort = null,\n\tonSortChange,\n\tmanualSorting = false,\n\tmanualPagination = false,\n\tmanualFiltering = false,\n\ttotal,\n\terror,\n\tonRetry,\n\tretryLabel = \"Try again\",\n\t\"aria-label\": ariaLabel = \"Data table\",\n\t\"aria-describedby\": ariaDescribedBy,\n}: DataTableProps<T>) {\n\tconst [uncontrolledSort, setUncontrolledSort] = useState<DataTableSort | null>(defaultSort);\n\tconst sort = controlledSort === undefined ? uncontrolledSort : controlledSort;\n\tconst requestSort = (next: DataTableSort) => {\n\t\tif (controlledSort === undefined) setUncontrolledSort(next);\n\t\tonSortChange?.(next);\n\t};\n\tconst [uncontrolledSelected, setUncontrolledSelected] = useState<string[]>(defaultSelected ?? []);\n\tconst [uncontrolledPage, setUncontrolledPage] = useState(defaultPage);\n\tconst rowIds = useRef(new WeakMap<object, string>());\n\tconst rowSeq = useRef(0);\n\tconst assignedKeys = useRef(new WeakMap<object, string[]>());\n\tconst lastOwner = useRef(new Map<string, object>());\n\tconst lastKeyByCanonical = useRef(new Map<string, string>());\n\tconst lastDupsByCanonical = useRef(new Map<string, string[]>());\n\tconst symbolKeys = useRef(new Map<symbol, string>());\n\tconst query = filter.trim().toLowerCase();\n\n\tconst rows = useMemo(() => {\n\t\tconst identityOf = (row: object) => {\n\t\t\tlet stored = rowIds.current.get(row);\n\t\t\tif (!stored) {\n\t\t\t\tstored = `basalt-row-${rowSeq.current++}`;\n\t\t\t\trowIds.current.set(row, stored);\n\t\t\t}\n\t\t\treturn stored;\n\t\t};\n\t\tconst canonicalOf = (row: T, index: number) => {\n\t\t\tconst requested = getRowId?.(row, index);\n\t\t\tif (requested !== undefined) {\n\t\t\t\treturn `get:${requested}`;\n\t\t\t}\n\t\t\tif (isRefRow(row) && \"id\" in row) {\n\t\t\t\tconst raw = (row as { id: unknown }).id;\n\t\t\t\tif (raw != null) {\n\t\t\t\t\treturn `id:${String(raw)}`;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tconst used = new Set<string>();\n\t\tconst nextLastKey = new Map<string, string>();\n\t\tconst nextDups = new Map<string, string[]>();\n\t\tconst nextAssigned = new Map<object, string[]>();\n\t\tconst nextOwner = new Map<string, object>();\n\t\tconst rememberKey = (row: T, index: number, key: string, objectRow: object | null) => {\n\t\t\tif (!objectRow) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst list = nextAssigned.get(objectRow) ?? [];\n\t\t\tlist.push(key);\n\t\t\tnextAssigned.set(objectRow, list);\n\t\t\tnextOwner.set(key, objectRow);\n\t\t\tconst canonical = canonicalOf(row, index);\n\t\t\tif (!canonical) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tnextLastKey.set(canonical, key);\n\t\t\tif (isInstanceKey(key)) {\n\t\t\t\tconst dups = nextDups.get(canonical) ?? [];\n\t\t\t\tdups.push(key);\n\t\t\t\tnextDups.set(canonical, dups);\n\t\t\t}\n\t\t};\n\t\tconst counts = new WeakMap<object, number>();\n\t\tconst pending = data.map((row, index) => {\n\t\t\tconst objectRow = isRefRow(row) ? row : null;\n\t\t\tconst occurrence = objectRow ? (counts.get(objectRow) ?? 0) : 0;\n\t\t\tif (objectRow) {\n\t\t\t\tcounts.set(objectRow, occurrence + 1);\n\t\t\t}\n\t\t\treturn {\n\t\t\t\trow,\n\t\t\t\tindex,\n\t\t\t\toccurrence,\n\t\t\t\tkey: undefined as string | undefined,\n\t\t\t};\n\t\t});\n\t\tfor (const item of pending) {\n\t\t\tconst objectRow = isRefRow(item.row) ? item.row : null;\n\t\t\tif (!objectRow) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst previous = assignedKeys.current.get(objectRow)?.[item.occurrence];\n\t\t\tif (!previous || used.has(previous)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (lastOwner.current.get(previous) === objectRow) {\n\t\t\t\titem.key = previous;\n\t\t\t\tused.add(previous);\n\t\t\t}\n\t\t}\n\t\tconst keyed = pending.map(({ row, index, occurrence, key: reserved }) => {\n\t\t\tconst objectRow = isRefRow(row) ? row : null;\n\t\t\tif (reserved) {\n\t\t\t\trememberKey(row, index, reserved, objectRow);\n\t\t\t\treturn {\n\t\t\t\t\trow,\n\t\t\t\t\tkey: reserved,\n\t\t\t\t\tselectId: publicSelectId(row, index, reserved, getRowId),\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst isRepeat = occurrence > 0;\n\t\t\tlet key: string | undefined;\n\t\t\tconst requested = canonicalOf(row, index);\n\t\t\tif (requested) {\n\t\t\t\tkey = requested;\n\t\t\t}\n\t\t\tif (objectRow) {\n\t\t\t\tconst stored = identityOf(objectRow);\n\t\t\t\tif (!key) {\n\t\t\t\t\tkey = isRepeat ? `gen:${stored}#${occurrence}` : `gen:${stored}`;\n\t\t\t\t} else if (used.has(key) || isRepeat) {\n\t\t\t\t\tconst reused = (lastDupsByCanonical.current.get(key) ?? []).find(\n\t\t\t\t\t\t(candidate) => !used.has(candidate),\n\t\t\t\t\t);\n\t\t\t\t\tkey = reused ?? (isRepeat ? `dup:${stored}#${occurrence}` : `dup:${stored}`);\n\t\t\t\t} else {\n\t\t\t\t\tconst inherited = lastKeyByCanonical.current.get(key);\n\t\t\t\t\tif (inherited && !used.has(inherited) && isInstanceKey(inherited)) {\n\t\t\t\t\t\tkey = inherited;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tkey = key ?? primitiveKey(row, index, symbolKeys.current, rowSeq);\n\t\t\tif (used.has(key)) {\n\t\t\t\tlet n = 0;\n\t\t\t\tlet candidate = `occ:${key}#${n}`;\n\t\t\t\twhile (used.has(candidate)) {\n\t\t\t\t\tn += 1;\n\t\t\t\t\tcandidate = `occ:${key}#${n}`;\n\t\t\t\t}\n\t\t\t\tkey = candidate;\n\t\t\t}\n\t\t\tused.add(key);\n\t\t\trememberKey(row, index, key, objectRow);\n\t\t\treturn { row, key, selectId: publicSelectId(row, index, key, getRowId) };\n\t\t});\n\t\tconst filtered =\n\t\t\tquery && !manualFiltering\n\t\t\t\t? keyed.filter(({ row }) =>\n\t\t\t\t\t\tcolumns.some((column) => filterSource(column, row).toLowerCase().includes(query)),\n\t\t\t\t\t)\n\t\t\t\t: keyed;\n\t\tconst sorted = (() => {\n\t\t\tif (!sort || manualSorting) {\n\t\t\t\treturn filtered;\n\t\t\t}\n\t\t\tconst column = columns.find((item) => item.id === sort.id);\n\t\t\tif (!column) {\n\t\t\t\treturn filtered;\n\t\t\t}\n\t\t\treturn [...filtered].sort((a, b) => {\n\t\t\t\tconst left = column.sortValue?.(a.row) ?? column.accessor(a.row);\n\t\t\t\tconst right = column.sortValue?.(b.row) ?? column.accessor(b.row);\n\t\t\t\tconst cmp = compareUnknown(left, right);\n\t\t\t\treturn sort.dir === \"asc\" ? cmp : -cmp;\n\t\t\t});\n\t\t})();\n\t\treturn {\n\t\t\trows: sorted,\n\t\t\tassigned: nextAssigned,\n\t\t\towner: nextOwner,\n\t\t\tlastKey: nextLastKey,\n\t\t\tdups: nextDups,\n\t\t};\n\t}, [columns, data, getRowId, query, sort, manualFiltering, manualSorting]);\n\n\tuseLayoutEffect(() => {\n\t\tfor (const [objectRow, keys] of rows.assigned) {\n\t\t\tassignedKeys.current.set(objectRow, keys);\n\t\t}\n\t\tlastOwner.current = rows.owner;\n\t\tlastKeyByCanonical.current = rows.lastKey;\n\t\tlastDupsByCanonical.current = rows.dups;\n\t}, [rows]);\n\n\tconst selectable =\n\t\tselected !== undefined || defaultSelected !== undefined || onSelectedChange !== undefined;\n\tconst selectedIds = selected ?? uncontrolledSelected;\n\tconst setSelectedIds = useCallback(\n\t\t(next: string[]) => {\n\t\t\tif (selected === undefined) {\n\t\t\t\tsetUncontrolledSelected(next);\n\t\t\t}\n\t\t\tonSelectedChange?.(next);\n\t\t},\n\t\t[onSelectedChange, selected],\n\t);\n\tconst rowCount = manualPagination && total !== undefined ? Math.max(0, total) : rows.rows.length;\n\tconst pageCount = pageSize && pageSize > 0 ? Math.max(1, Math.ceil(rowCount / pageSize)) : 1;\n\tconst resolvedPage = Math.min(pageCount, Math.max(1, page ?? uncontrolledPage));\n\tconst setResolvedPage = useCallback(\n\t\t(next: number) => {\n\t\t\tif (page === undefined) {\n\t\t\t\tsetUncontrolledPage(next);\n\t\t\t}\n\t\t\tonPageChange?.(next);\n\t\t},\n\t\t[onPageChange, page],\n\t);\n\tconst lastCorrection = useRef<string | null>(null);\n\tuseEffect(() => {\n\t\tconst requested = page ?? uncontrolledPage;\n\t\tif (requested === resolvedPage || loading) {\n\t\t\tlastCorrection.current = null;\n\t\t\treturn;\n\t\t}\n\t\tconst correction = `${requested}:${resolvedPage}`;\n\t\tif (lastCorrection.current !== correction) {\n\t\t\tlastCorrection.current = correction;\n\t\t\tsetResolvedPage(resolvedPage);\n\t\t}\n\t}, [page, uncontrolledPage, resolvedPage, loading, setResolvedPage]);\n\tconst paged =\n\t\t!manualPagination && pageSize && pageSize > 0\n\t\t\t? rows.rows.slice((resolvedPage - 1) * pageSize, resolvedPage * pageSize)\n\t\t\t: rows.rows;\n\tconst colCount = columns.length + (selectable ? 1 : 0);\n\tconst toggleSelected = (id: string) => {\n\t\tif (multiple) {\n\t\t\tsetSelectedIds(\n\t\t\t\tselectedIds.includes(id) ? selectedIds.filter((item) => item !== id) : [...selectedIds, id],\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tsetSelectedIds(selectedIds.includes(id) ? [] : [id]);\n\t};\n\n\treturn (\n\t\t<div className=\"flex min-w-0 flex-col gap-3\">\n\t\t\t<div\n\t\t\t\trole=\"region\"\n\t\t\t\taria-label={`${ariaLabel} scroll area`}\n\t\t\t\t// biome-ignore lint/a11y/noNoninteractiveTabindex: Named overflow regions need keyboard scrolling.\n\t\t\t\ttabIndex={0}\n\t\t\t\tclassName=\"min-w-0 overflow-x-auto rounded-basalt-md focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-basalt-primary\"\n\t\t\t>\n\t\t\t\t<Table\n\t\t\t\t\tclassName={cn(\"w-full\", className)}\n\t\t\t\t\taria-label={ariaLabel}\n\t\t\t\t\taria-describedby={ariaDescribedBy}\n\t\t\t\t\taria-busy={loading || undefined}\n\t\t\t\t>\n\t\t\t\t\t<TableHeader>\n\t\t\t\t\t\t<TableRow>\n\t\t\t\t\t\t\t{selectable ? (\n\t\t\t\t\t\t\t\t<TableHead>\n\t\t\t\t\t\t\t\t\t<span className=\"sr-only\">Select</span>\n\t\t\t\t\t\t\t\t</TableHead>\n\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t{columns.map((column) => (\n\t\t\t\t\t\t\t\t<TableHead\n\t\t\t\t\t\t\t\t\tkey={column.id}\n\t\t\t\t\t\t\t\t\tclassName={column.headerClassName}\n\t\t\t\t\t\t\t\t\tstyle={{ width: column.width }}\n\t\t\t\t\t\t\t\t\tscope=\"col\"\n\t\t\t\t\t\t\t\t\taria-sort={\n\t\t\t\t\t\t\t\t\t\tcolumn.sortable === false\n\t\t\t\t\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t\t\t\t\t: sort?.id === column.id\n\t\t\t\t\t\t\t\t\t\t\t\t? sort.dir === \"asc\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t? \"ascending\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t: \"descending\"\n\t\t\t\t\t\t\t\t\t\t\t\t: \"none\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{column.sortable === false ? (\n\t\t\t\t\t\t\t\t\t\t(column.headerContent ?? column.header)\n\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\taria-label={column.header}\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"appearance-none border-0 bg-transparent p-0 font-inherit text-inherit font-medium cursor-pointer rounded-sm focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-basalt-primary\"\n\t\t\t\t\t\t\t\t\t\t\tonClick={() =>\n\t\t\t\t\t\t\t\t\t\t\t\trequestSort(\n\t\t\t\t\t\t\t\t\t\t\t\t\tsort?.id === column.id && sort.dir === \"asc\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? { id: column.id, dir: \"desc\" }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: { id: column.id, dir: \"asc\" },\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{column.headerContent ?? column.header}\n\t\t\t\t\t\t\t\t\t\t\t{sort?.id === column.id ? (sort.dir === \"asc\" ? \" ↑\" : \" ↓\") : \"\"}\n\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</TableHead>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t</TableHeader>\n\t\t\t\t\t<TableBody>\n\t\t\t\t\t\t{loading ? (\n\t\t\t\t\t\t\t<TableRow>\n\t\t\t\t\t\t\t\t<TableCell colSpan={colCount}>\n\t\t\t\t\t\t\t\t\t<div role=\"status\" className=\"flex flex-col gap-2 py-2\">\n\t\t\t\t\t\t\t\t\t\t<span className=\"sr-only\">Loading</span>\n\t\t\t\t\t\t\t\t\t\t<SkeletonLine />\n\t\t\t\t\t\t\t\t\t\t<SkeletonLine />\n\t\t\t\t\t\t\t\t\t\t<SkeletonLine />\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t\t) : error != null && error !== false ? (\n\t\t\t\t\t\t\t<TableRow>\n\t\t\t\t\t\t\t\t<TableCell colSpan={colCount}>\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\trole=\"alert\"\n\t\t\t\t\t\t\t\t\t\tclassName=\"flex flex-wrap items-center justify-between gap-3 py-6\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<div>{error}</div>\n\t\t\t\t\t\t\t\t\t\t{onRetry ? (\n\t\t\t\t\t\t\t\t\t\t\t<Button variant=\"outline\" size=\"sm\" onClick={onRetry}>\n\t\t\t\t\t\t\t\t\t\t\t\t{retryLabel}\n\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t\t) : paged.length === 0 ? (\n\t\t\t\t\t\t\t<TableRow>\n\t\t\t\t\t\t\t\t<TableCell colSpan={colCount}>\n\t\t\t\t\t\t\t\t\t<div role=\"status\">{empty}</div>\n\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\tpaged.map(({ row, key, selectId }) => {\n\t\t\t\t\t\t\t\tconst isSelected = selectedIds.includes(selectId);\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<TableRow\n\t\t\t\t\t\t\t\t\t\tkey={key}\n\t\t\t\t\t\t\t\t\t\tvariant={isSelected ? \"selected\" : \"default\"}\n\t\t\t\t\t\t\t\t\t\taria-selected={selectable ? isSelected : undefined}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{selectable ? (\n\t\t\t\t\t\t\t\t\t\t\t<TableCell>\n\t\t\t\t\t\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tchecked={isSelected}\n\t\t\t\t\t\t\t\t\t\t\t\t\taria-label={`Select ${selectId}`}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonChange={() => toggleSelected(selectId)}\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t\t\t{columns.map((column) => {\n\t\t\t\t\t\t\t\t\t\t\tconst cell = column.accessor(row);\n\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t<TableCell key={column.id} className={column.cellClassName}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{typeof cell === \"bigint\" ? String(cell) : cell}\n\t\t\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t)}\n\t\t\t\t\t</TableBody>\n\t\t\t\t</Table>\n\t\t\t</div>\n\t\t\t{pageSize && pageSize > 0 ? (\n\t\t\t\t<Pagination\n\t\t\t\t\tpage={resolvedPage}\n\t\t\t\t\tpageCount={pageCount}\n\t\t\t\t\tdisabled={loading}\n\t\t\t\t\tonPageChange={setResolvedPage}\n\t\t\t\t/>\n\t\t\t) : null}\n\t\t</div>\n\t);\n}\n"],"mappings":"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"}