@carto/ps-react-ui 5.0.0-widgets.7 → 5.0.0-widgets.8
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.
|
@@ -4,7 +4,11 @@ export interface UseSortOptions {
|
|
|
4
4
|
onSortChange?: (columnId: string, direction: SortDirection) => void;
|
|
5
5
|
}
|
|
6
6
|
export interface UseSortResult<T> extends SortState {
|
|
7
|
+
/** Whether sorting is enabled */
|
|
8
|
+
sortEnabled: boolean;
|
|
7
9
|
/** Current sort state */
|
|
10
|
+
columnId: string | null;
|
|
11
|
+
direction: SortDirection;
|
|
8
12
|
/** Sorted data (for local mode) */
|
|
9
13
|
sortedData: T[];
|
|
10
14
|
/** Toggle sort on a column */
|
package/dist/widgets/table.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { jsx as
|
|
1
|
+
import { jsx as p, jsxs as G } from "react/jsx-runtime";
|
|
2
2
|
import { c as x } from "react/compiler-runtime";
|
|
3
3
|
import { TableSortLabel as le, TableCell as D, Checkbox as K, Link as ie, Typography as re, TableRow as J, IconButton as H, Box as q, TablePagination as se, Table as Q, TableHead as X, TableBody as Y, Paper as ce, TableContainer as ae, Skeleton as Z } from "@mui/material";
|
|
4
4
|
import fe from "react-markdown";
|
|
@@ -6,7 +6,7 @@ import ue from "@mui/icons-material/FirstPage";
|
|
|
6
6
|
import de from "@mui/icons-material/KeyboardArrowLeft";
|
|
7
7
|
import ge from "@mui/icons-material/KeyboardArrowRight";
|
|
8
8
|
import he from "@mui/icons-material/LastPage";
|
|
9
|
-
import { useRef as
|
|
9
|
+
import { useRef as pe, useEffect as me } from "react";
|
|
10
10
|
import { u as W } from "../widget-store-Dd7_sWZT.js";
|
|
11
11
|
import { useShallow as U } from "zustand/shallow";
|
|
12
12
|
import "@mui/icons-material";
|
|
@@ -32,7 +32,7 @@ function Pe(o) {
|
|
|
32
32
|
"aria-label": "select all rows"
|
|
33
33
|
}, e[0] = g) : g = e[0];
|
|
34
34
|
let h;
|
|
35
|
-
return e[1] !== r || e[2] !== a || e[3] !== f ? (h = /* @__PURE__ */
|
|
35
|
+
return e[1] !== r || e[2] !== a || e[3] !== f ? (h = /* @__PURE__ */ p(D, { padding: "checkbox", children: /* @__PURE__ */ p(K, { checked: r, indeterminate: a, onChange: f, inputProps: g }) }), e[1] = r, e[2] = a, e[3] = f, e[4] = h) : h = e[4], h;
|
|
36
36
|
}
|
|
37
37
|
const s = n?.columnId === t.id, c = s ? n.direction : void 0;
|
|
38
38
|
if (t.sortable && i) {
|
|
@@ -41,19 +41,19 @@ function Pe(o) {
|
|
|
41
41
|
width: t.width
|
|
42
42
|
}, e[5] = t.width, e[6] = g) : g = e[6];
|
|
43
43
|
const h = c ?? "asc";
|
|
44
|
-
let
|
|
45
|
-
e[7] !== t.id || e[8] !== i ? (
|
|
44
|
+
let m;
|
|
45
|
+
e[7] !== t.id || e[8] !== i ? (m = () => i(t.id), e[7] = t.id, e[8] = i, e[9] = m) : m = e[9];
|
|
46
46
|
let b;
|
|
47
|
-
e[10] !== t.label || e[11] !== s || e[12] !== h || e[13] !==
|
|
47
|
+
e[10] !== t.label || e[11] !== s || e[12] !== h || e[13] !== m ? (b = /* @__PURE__ */ p(le, { active: s, direction: h, onClick: m, children: t.label }), e[10] = t.label, e[11] = s, e[12] = h, e[13] = m, e[14] = b) : b = e[14];
|
|
48
48
|
let C;
|
|
49
|
-
return e[15] !== t.align || e[16] !== c || e[17] !== g || e[18] !== b ? (C = /* @__PURE__ */
|
|
49
|
+
return e[15] !== t.align || e[16] !== c || e[17] !== g || e[18] !== b ? (C = /* @__PURE__ */ p(D, { align: t.align, style: g, sortDirection: c, children: b }), e[15] = t.align, e[16] = c, e[17] = g, e[18] = b, e[19] = C) : C = e[19], C;
|
|
50
50
|
}
|
|
51
51
|
let u;
|
|
52
52
|
e[20] !== t.width ? (u = {
|
|
53
53
|
width: t.width
|
|
54
54
|
}, e[20] = t.width, e[21] = u) : u = e[21];
|
|
55
55
|
let P;
|
|
56
|
-
return e[22] !== t.align || e[23] !== t.label || e[24] !== u ? (P = /* @__PURE__ */
|
|
56
|
+
return e[22] !== t.align || e[23] !== t.label || e[24] !== u ? (P = /* @__PURE__ */ p(D, { align: t.align, style: u, children: t.label }), e[22] = t.align, e[23] = t.label, e[24] = u, e[25] = P) : P = e[25], P;
|
|
57
57
|
}
|
|
58
58
|
function be(o) {
|
|
59
59
|
return o == null ? "" : Array.isArray(o) ? `[${o.map((t) => typeof t == "string" ? `"${t}"` : String(t)).join(", ")}]` : typeof o == "object" ? JSON.stringify(o) : o;
|
|
@@ -87,7 +87,7 @@ const j = (o) => {
|
|
|
87
87
|
children: t
|
|
88
88
|
} = o;
|
|
89
89
|
let n;
|
|
90
|
-
return e[0] !== t ? (n = /* @__PURE__ */
|
|
90
|
+
return e[0] !== t ? (n = /* @__PURE__ */ p(re, { component: "span", variant: "body2", color: "inherit", children: t }), e[0] = t, e[1] = n) : n = e[1], n;
|
|
91
91
|
}, Ce = {
|
|
92
92
|
h1: j,
|
|
93
93
|
h2: j,
|
|
@@ -98,7 +98,7 @@ const j = (o) => {
|
|
|
98
98
|
href: e
|
|
99
99
|
}) => {
|
|
100
100
|
const t = e?.startsWith("http");
|
|
101
|
-
return /* @__PURE__ */
|
|
101
|
+
return /* @__PURE__ */ p(ie, { href: e, target: t ? "_blank" : void 0, rel: t ? "noopener noreferrer" : void 0, color: "text.primary", underline: "always", children: o });
|
|
102
102
|
},
|
|
103
103
|
img: () => null,
|
|
104
104
|
ul: j,
|
|
@@ -115,19 +115,19 @@ function ve(o) {
|
|
|
115
115
|
let f;
|
|
116
116
|
e[0] !== t || e[1] !== n ? (f = t.formatter(n), e[0] = t, e[1] = n, e[2] = f) : f = e[2];
|
|
117
117
|
let s;
|
|
118
|
-
return e[3] !== t.align || e[4] !== f ? (s = /* @__PURE__ */
|
|
118
|
+
return e[3] !== t.align || e[4] !== f ? (s = /* @__PURE__ */ p(D, { align: a, children: f }), e[3] = t.align, e[4] = f, e[5] = s) : s = e[5], s;
|
|
119
119
|
}
|
|
120
120
|
if (typeof n == "string") {
|
|
121
121
|
let a;
|
|
122
|
-
e[6] !== n ? (a = /* @__PURE__ */
|
|
122
|
+
e[6] !== n ? (a = /* @__PURE__ */ p(fe, { components: Ce, children: n }), e[6] = n, e[7] = a) : a = e[7];
|
|
123
123
|
let f;
|
|
124
|
-
return e[8] !== t.align || e[9] !== a ? (f = /* @__PURE__ */
|
|
124
|
+
return e[8] !== t.align || e[9] !== a ? (f = /* @__PURE__ */ p(D, { align: t.align, children: a }), e[8] = t.align, e[9] = a, e[10] = f) : f = e[10], f;
|
|
125
125
|
}
|
|
126
126
|
const i = t.align;
|
|
127
127
|
let l;
|
|
128
128
|
e[11] !== n ? (l = be(n), e[11] = n, e[12] = l) : l = e[12];
|
|
129
129
|
let r;
|
|
130
|
-
return e[13] !== t.align || e[14] !== l ? (r = /* @__PURE__ */
|
|
130
|
+
return e[13] !== t.align || e[14] !== l ? (r = /* @__PURE__ */ p(D, { align: i, children: l }), e[13] = t.align, e[14] = l, e[15] = r) : r = e[15], r;
|
|
131
131
|
}
|
|
132
132
|
function we(o) {
|
|
133
133
|
const e = x(32), {
|
|
@@ -149,7 +149,7 @@ function we(o) {
|
|
|
149
149
|
e[3] !== a || e[4] !== t ? (h = ($) => {
|
|
150
150
|
$.stopPropagation(), a?.(t);
|
|
151
151
|
}, e[3] = a, e[4] = t, e[5] = h) : h = e[5];
|
|
152
|
-
const
|
|
152
|
+
const m = h;
|
|
153
153
|
let b;
|
|
154
154
|
e[6] !== f || e[7] !== t ? (b = () => {
|
|
155
155
|
f?.(t);
|
|
@@ -159,26 +159,26 @@ function we(o) {
|
|
|
159
159
|
e[9] !== s ? (v = () => {
|
|
160
160
|
s?.();
|
|
161
161
|
}, e[9] = s, e[10] = v) : v = e[10];
|
|
162
|
-
const
|
|
163
|
-
let
|
|
164
|
-
e[11] !== d ? (
|
|
162
|
+
const k = v, T = !!f || !!s || !!r, d = r ? "pointer" : "default";
|
|
163
|
+
let S;
|
|
164
|
+
e[11] !== d ? (S = {
|
|
165
165
|
cursor: d
|
|
166
|
-
}, e[11] = d, e[12] =
|
|
167
|
-
let
|
|
168
|
-
e[13] !==
|
|
166
|
+
}, e[11] = d, e[12] = S) : S = e[12];
|
|
167
|
+
let A;
|
|
168
|
+
e[13] !== m || e[14] !== c || e[15] !== t || e[16] !== u ? (A = u && /* @__PURE__ */ p(D, { padding: "checkbox", children: /* @__PURE__ */ p(K, { checked: c, onClick: m, inputProps: {
|
|
169
169
|
"aria-label": `select row ${t.id}`
|
|
170
|
-
} }) }), e[13] =
|
|
171
|
-
let
|
|
170
|
+
} }) }), e[13] = m, e[14] = c, e[15] = t, e[16] = u, e[17] = A) : A = e[17];
|
|
171
|
+
let y;
|
|
172
172
|
if (e[18] !== n || e[19] !== t) {
|
|
173
173
|
let $;
|
|
174
|
-
e[21] !== t ? ($ = (O) => /* @__PURE__ */
|
|
174
|
+
e[21] !== t ? ($ = (O) => /* @__PURE__ */ p(ve, { column: O, value: t[O.id] }, O.id), e[21] = t, e[22] = $) : $ = e[22], y = n.map($), e[18] = n, e[19] = t, e[20] = y;
|
|
175
175
|
} else
|
|
176
|
-
|
|
177
|
-
let
|
|
178
|
-
return e[23] !== g || e[24] !== C || e[25] !==
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
] }), e[23] = g, e[24] = C, e[25] =
|
|
176
|
+
y = e[20];
|
|
177
|
+
let w;
|
|
178
|
+
return e[23] !== g || e[24] !== C || e[25] !== k || e[26] !== c || e[27] !== A || e[28] !== y || e[29] !== T || e[30] !== S ? (w = /* @__PURE__ */ G(J, { hover: T, selected: c, onClick: g, onMouseEnter: C, onMouseLeave: k, sx: S, children: [
|
|
179
|
+
A,
|
|
180
|
+
y
|
|
181
|
+
] }), e[23] = g, e[24] = C, e[25] = k, e[26] = c, e[27] = A, e[28] = y, e[29] = T, e[30] = S, e[31] = w) : w = e[31], w;
|
|
182
182
|
}
|
|
183
183
|
function V(o) {
|
|
184
184
|
const e = x(33), {
|
|
@@ -207,38 +207,38 @@ function V(o) {
|
|
|
207
207
|
l(E, r);
|
|
208
208
|
}, e[8] = r, e[9] = l, e[10] = g) : g = e[10];
|
|
209
209
|
const h = g;
|
|
210
|
-
let
|
|
211
|
-
e[11] === Symbol.for("react.memo_cache_sentinel") ? (
|
|
210
|
+
let m;
|
|
211
|
+
e[11] === Symbol.for("react.memo_cache_sentinel") ? (m = {
|
|
212
212
|
flexShrink: 0,
|
|
213
213
|
ml: 2.5
|
|
214
|
-
}, e[11] =
|
|
214
|
+
}, e[11] = m) : m = e[11];
|
|
215
215
|
const b = n === 0;
|
|
216
216
|
let C;
|
|
217
|
-
e[12] === Symbol.for("react.memo_cache_sentinel") ? (C = /* @__PURE__ */
|
|
217
|
+
e[12] === Symbol.for("react.memo_cache_sentinel") ? (C = /* @__PURE__ */ p(ue, {}), e[12] = C) : C = e[12];
|
|
218
218
|
let v;
|
|
219
|
-
e[13] !== f || e[14] !== b ? (v = /* @__PURE__ */
|
|
220
|
-
const
|
|
221
|
-
let k;
|
|
222
|
-
e[16] === Symbol.for("react.memo_cache_sentinel") ? (k = /* @__PURE__ */ m(de, {}), e[16] = k) : k = e[16];
|
|
223
|
-
let d;
|
|
224
|
-
e[17] !== c || e[18] !== w ? (d = /* @__PURE__ */ m(H, { onClick: c, disabled: w, "aria-label": "previous page", children: k }), e[17] = c, e[18] = w, e[19] = d) : d = e[19];
|
|
225
|
-
const _ = n >= r;
|
|
219
|
+
e[13] !== f || e[14] !== b ? (v = /* @__PURE__ */ p(H, { onClick: f, disabled: b, "aria-label": "first page", children: C }), e[13] = f, e[14] = b, e[15] = v) : v = e[15];
|
|
220
|
+
const k = n === 0;
|
|
226
221
|
let T;
|
|
227
|
-
e[
|
|
228
|
-
let
|
|
229
|
-
e[
|
|
230
|
-
const
|
|
222
|
+
e[16] === Symbol.for("react.memo_cache_sentinel") ? (T = /* @__PURE__ */ p(de, {}), e[16] = T) : T = e[16];
|
|
223
|
+
let d;
|
|
224
|
+
e[17] !== c || e[18] !== k ? (d = /* @__PURE__ */ p(H, { onClick: c, disabled: k, "aria-label": "previous page", children: T }), e[17] = c, e[18] = k, e[19] = d) : d = e[19];
|
|
225
|
+
const S = n >= r;
|
|
226
|
+
let A;
|
|
227
|
+
e[20] === Symbol.for("react.memo_cache_sentinel") ? (A = /* @__PURE__ */ p(ge, {}), e[20] = A) : A = e[20];
|
|
228
|
+
let y;
|
|
229
|
+
e[21] !== P || e[22] !== S ? (y = /* @__PURE__ */ p(H, { onClick: P, disabled: S, "aria-label": "next page", children: A }), e[21] = P, e[22] = S, e[23] = y) : y = e[23];
|
|
230
|
+
const w = n >= r;
|
|
231
231
|
let $;
|
|
232
|
-
e[24] === Symbol.for("react.memo_cache_sentinel") ? ($ = /* @__PURE__ */
|
|
232
|
+
e[24] === Symbol.for("react.memo_cache_sentinel") ? ($ = /* @__PURE__ */ p(he, {}), e[24] = $) : $ = e[24];
|
|
233
233
|
let O;
|
|
234
|
-
e[25] !== h || e[26] !==
|
|
235
|
-
let
|
|
236
|
-
return e[28] !== d || e[29] !==
|
|
234
|
+
e[25] !== h || e[26] !== w ? (O = /* @__PURE__ */ p(H, { onClick: h, disabled: w, "aria-label": "last page", children: $ }), e[25] = h, e[26] = w, e[27] = O) : O = e[27];
|
|
235
|
+
let _;
|
|
236
|
+
return e[28] !== d || e[29] !== y || e[30] !== O || e[31] !== v ? (_ = /* @__PURE__ */ G(q, { sx: m, children: [
|
|
237
237
|
v,
|
|
238
238
|
d,
|
|
239
|
-
|
|
239
|
+
y,
|
|
240
240
|
O
|
|
241
|
-
] }), e[28] = d, e[29] =
|
|
241
|
+
] }), e[28] = d, e[29] = y, e[30] = O, e[31] = v, e[32] = _) : _ = e[32], _;
|
|
242
242
|
}
|
|
243
243
|
function ke(o) {
|
|
244
244
|
const e = x(13), {
|
|
@@ -253,26 +253,26 @@ function ke(o) {
|
|
|
253
253
|
e[0] !== l ? (f = l === void 0 ? [5, 10, 25, 50] : l, e[0] = l, e[1] = f) : f = e[1];
|
|
254
254
|
const s = f;
|
|
255
255
|
let c;
|
|
256
|
-
e[2] !== r ? (c = (
|
|
256
|
+
e[2] !== r ? (c = (m, b) => {
|
|
257
257
|
r(b);
|
|
258
258
|
}, e[2] = r, e[3] = c) : c = e[3];
|
|
259
259
|
const u = c;
|
|
260
260
|
let P;
|
|
261
|
-
e[4] !== a ? (P = (
|
|
262
|
-
a(parseInt(
|
|
261
|
+
e[4] !== a ? (P = (m) => {
|
|
262
|
+
a(parseInt(m.target.value, 10));
|
|
263
263
|
}, e[4] = a, e[5] = P) : P = e[5];
|
|
264
264
|
const g = P;
|
|
265
265
|
let h;
|
|
266
|
-
return e[6] !== u || e[7] !== g || e[8] !== t || e[9] !== n || e[10] !== s || e[11] !== i ? (h = /* @__PURE__ */
|
|
266
|
+
return e[6] !== u || e[7] !== g || e[8] !== t || e[9] !== n || e[10] !== s || e[11] !== i ? (h = /* @__PURE__ */ p(se, { component: "div", count: i, page: t, rowsPerPage: n, rowsPerPageOptions: s, onPageChange: u, onRowsPerPageChange: g, ActionsComponent: V }), e[6] = u, e[7] = g, e[8] = t, e[9] = n, e[10] = s, e[11] = i, e[12] = h) : h = e[12], h;
|
|
267
267
|
}
|
|
268
268
|
function Te(o) {
|
|
269
|
-
const e = x(4), t =
|
|
269
|
+
const e = x(4), t = pe(null), n = W(Ae);
|
|
270
270
|
let i, l;
|
|
271
271
|
return e[0] !== n || e[1] !== o ? (i = () => {
|
|
272
272
|
t.current && n(o, {
|
|
273
273
|
refUI: t
|
|
274
274
|
});
|
|
275
|
-
}, l = [o, n], e[0] = n, e[1] = o, e[2] = i, e[3] = l) : (i = e[2], l = e[3]),
|
|
275
|
+
}, l = [o, n], e[0] = n, e[1] = o, e[2] = i, e[3] = l) : (i = e[2], l = e[3]), me(i, l), t;
|
|
276
276
|
}
|
|
277
277
|
function Ae(o) {
|
|
278
278
|
return o.setWidget;
|
|
@@ -288,7 +288,7 @@ function M(o) {
|
|
|
288
288
|
} = o, e[0] = o, e[1] = t, e[2] = n, e[3] = i, e[4] = l) : (t = e[1], n = e[2], i = e[3], l = e[4]);
|
|
289
289
|
const r = l === void 0 ? !0 : l;
|
|
290
290
|
let a;
|
|
291
|
-
return e[5] !== t || e[6] !== n || e[7] !== i || e[8] !== r ? (a = /* @__PURE__ */
|
|
291
|
+
return e[5] !== t || e[6] !== n || e[7] !== i || e[8] !== r ? (a = /* @__PURE__ */ p(Q, { stickyHeader: r, ref: i, ...n, children: t }), e[5] = t, e[6] = n, e[7] = i, e[8] = r, e[9] = a) : a = e[9], a;
|
|
292
292
|
}
|
|
293
293
|
M.Head = X;
|
|
294
294
|
M.CellHeader = Pe;
|
|
@@ -302,7 +302,7 @@ M.PaginationActions = V;
|
|
|
302
302
|
function Ee(o) {
|
|
303
303
|
const e = x(3), t = Te(o.id);
|
|
304
304
|
let n;
|
|
305
|
-
return e[0] !== o.children || e[1] !== t ? (n = /* @__PURE__ */
|
|
305
|
+
return e[0] !== o.children || e[1] !== t ? (n = /* @__PURE__ */ p(ae, { ref: t, children: o.children }), e[0] = o.children, e[1] = t, e[2] = n) : n = e[2], n;
|
|
306
306
|
}
|
|
307
307
|
const $e = "local", I = 0, ee = 10, te = [5, 10, 25, 50], ne = null, oe = "asc";
|
|
308
308
|
function nt({
|
|
@@ -348,36 +348,37 @@ function ot(o = []) {
|
|
|
348
348
|
function lt(o, e) {
|
|
349
349
|
const t = x(38), n = W(Oe);
|
|
350
350
|
let i;
|
|
351
|
-
t[0] !== e || t[1] !== o ? (i = (
|
|
352
|
-
const
|
|
351
|
+
t[0] !== e || t[1] !== o ? (i = (y) => {
|
|
352
|
+
const w = y.widgets[o];
|
|
353
353
|
return {
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
354
|
+
paginationEnabled: !!w?.pagination,
|
|
355
|
+
page: w?.pagination?.page ?? I,
|
|
356
|
+
rowsPerPage: w?.pagination?.rowsPerPage ?? ee,
|
|
357
|
+
rowsPerPageOptions: w?.pagination?.rowsPerPageOptions ?? te,
|
|
358
|
+
total: w?.pagination?.total ?? e.length
|
|
358
359
|
};
|
|
359
360
|
}, t[0] = e, t[1] = o, t[2] = i) : i = t[2];
|
|
360
361
|
const l = W(U(i));
|
|
361
362
|
let r;
|
|
362
|
-
t[3] !== o ? (r = (
|
|
363
|
+
t[3] !== o ? (r = (y) => y.widgets[o]?.mode, t[3] = o, t[4] = r) : r = t[4];
|
|
363
364
|
const a = W(U(r)), f = Math.max(0, Math.ceil(l.total / (l?.rowsPerPage ?? 1)) - 1);
|
|
364
365
|
let s;
|
|
365
|
-
t[5] !== f || t[6] !== l || t[7] !== n || t[8] !== o ? (s = (
|
|
366
|
-
const
|
|
366
|
+
t[5] !== f || t[6] !== l || t[7] !== n || t[8] !== o ? (s = (y) => {
|
|
367
|
+
const w = Math.max(0, Math.min(y, f));
|
|
367
368
|
n(o, {
|
|
368
369
|
pagination: {
|
|
369
370
|
...l,
|
|
370
|
-
page:
|
|
371
|
+
page: w
|
|
371
372
|
}
|
|
372
373
|
});
|
|
373
374
|
}, t[5] = f, t[6] = l, t[7] = n, t[8] = o, t[9] = s) : s = t[9];
|
|
374
375
|
const c = s;
|
|
375
376
|
let u;
|
|
376
|
-
t[10] !== l || t[11] !== n || t[12] !== o ? (u = (
|
|
377
|
+
t[10] !== l || t[11] !== n || t[12] !== o ? (u = (y) => {
|
|
377
378
|
n(o, {
|
|
378
379
|
pagination: {
|
|
379
380
|
...l,
|
|
380
|
-
rowsPerPage:
|
|
381
|
+
rowsPerPage: y
|
|
381
382
|
}
|
|
382
383
|
});
|
|
383
384
|
}, t[10] = l, t[11] = n, t[12] = o, t[13] = u) : u = t[13];
|
|
@@ -385,36 +386,36 @@ function lt(o, e) {
|
|
|
385
386
|
let g;
|
|
386
387
|
t[14] !== c ? (g = () => c(0), t[14] = c, t[15] = g) : g = t[15];
|
|
387
388
|
const h = g;
|
|
388
|
-
let
|
|
389
|
-
t[16] !== f || t[17] !== c ? (
|
|
390
|
-
const b =
|
|
389
|
+
let m;
|
|
390
|
+
t[16] !== f || t[17] !== c ? (m = () => c(f), t[16] = f, t[17] = c, t[18] = m) : m = t[18];
|
|
391
|
+
const b = m;
|
|
391
392
|
let C;
|
|
392
393
|
t[19] !== l.page || t[20] !== c ? (C = () => c(l.page + 1), t[19] = l.page, t[20] = c, t[21] = C) : C = t[21];
|
|
393
394
|
const v = C;
|
|
394
|
-
let
|
|
395
|
-
t[22] !== l.page || t[23] !== c ? (
|
|
396
|
-
const
|
|
395
|
+
let k;
|
|
396
|
+
t[22] !== l.page || t[23] !== c ? (k = () => c(l.page - 1), t[22] = l.page, t[23] = c, t[24] = k) : k = t[24];
|
|
397
|
+
const T = k;
|
|
397
398
|
let d;
|
|
398
399
|
e: {
|
|
399
|
-
if (a === "remote") {
|
|
400
|
+
if (a === "remote" || !l.paginationEnabled) {
|
|
400
401
|
d = e;
|
|
401
402
|
break e;
|
|
402
403
|
}
|
|
403
|
-
let
|
|
404
|
-
t[25] !== e || t[26] !== l.page || t[27] !== l.rowsPerPage ? (
|
|
404
|
+
let y;
|
|
405
|
+
t[25] !== e || t[26] !== l.page || t[27] !== l.rowsPerPage ? (y = _e(e, l.page, l.rowsPerPage), t[25] = e, t[26] = l.page, t[27] = l.rowsPerPage, t[28] = y) : y = t[28], d = y;
|
|
405
406
|
}
|
|
406
|
-
const
|
|
407
|
-
let
|
|
408
|
-
return t[29] !== h || t[30] !== b || t[31] !== v || t[32] !==
|
|
407
|
+
const S = d;
|
|
408
|
+
let A;
|
|
409
|
+
return t[29] !== h || t[30] !== b || t[31] !== v || t[32] !== T || t[33] !== S || t[34] !== l || t[35] !== c || t[36] !== P ? (A = {
|
|
409
410
|
...l,
|
|
410
|
-
paginatedData:
|
|
411
|
+
paginatedData: S,
|
|
411
412
|
setPage: c,
|
|
412
413
|
setRowsPerPage: P,
|
|
413
414
|
goToFirstPage: h,
|
|
414
415
|
goToLastPage: b,
|
|
415
416
|
goToNextPage: v,
|
|
416
|
-
goToPreviousPage:
|
|
417
|
-
}, t[29] = h, t[30] = b, t[31] = v, t[32] =
|
|
417
|
+
goToPreviousPage: T
|
|
418
|
+
}, t[29] = h, t[30] = b, t[31] = v, t[32] = T, t[33] = S, t[34] = l, t[35] = c, t[36] = P, t[37] = A) : A = t[37], A;
|
|
418
419
|
}
|
|
419
420
|
function Oe(o) {
|
|
420
421
|
return o.setWidget;
|
|
@@ -428,10 +429,11 @@ function it(o, e, t) {
|
|
|
428
429
|
} = i, r = W(xe), a = W(Re);
|
|
429
430
|
let f;
|
|
430
431
|
n[2] !== o ? (f = (d) => {
|
|
431
|
-
const
|
|
432
|
+
const S = d.widgets[o];
|
|
432
433
|
return {
|
|
433
|
-
|
|
434
|
-
|
|
434
|
+
sortEnabled: !!S?.sort,
|
|
435
|
+
columnId: S?.sort?.columnId ?? ne,
|
|
436
|
+
direction: S?.sort?.direction ?? oe
|
|
435
437
|
};
|
|
436
438
|
}, n[2] = o, n[3] = f) : f = n[3];
|
|
437
439
|
const s = W(U(f));
|
|
@@ -440,27 +442,27 @@ function it(o, e, t) {
|
|
|
440
442
|
const u = W(U(c));
|
|
441
443
|
let P;
|
|
442
444
|
n[6] !== u || n[7] !== l || n[8] !== r || n[9] !== s || n[10] !== o ? (P = (d) => {
|
|
443
|
-
let
|
|
444
|
-
s.columnId === d && (
|
|
445
|
+
let S = "asc";
|
|
446
|
+
s.columnId === d && (S = s.direction === "asc" ? "desc" : "asc"), r(o, {
|
|
445
447
|
sort: {
|
|
446
448
|
...s,
|
|
447
449
|
columnId: d,
|
|
448
|
-
direction:
|
|
450
|
+
direction: S
|
|
449
451
|
}
|
|
450
|
-
}), u === "remote" && l && l(d,
|
|
452
|
+
}), u === "remote" && l && l(d, S);
|
|
451
453
|
}, n[6] = u, n[7] = l, n[8] = r, n[9] = s, n[10] = o, n[11] = P) : P = n[11];
|
|
452
454
|
const g = P;
|
|
453
455
|
let h;
|
|
454
|
-
n[12] !== u || n[13] !== l || n[14] !== r || n[15] !== s || n[16] !== o ? (h = (d,
|
|
456
|
+
n[12] !== u || n[13] !== l || n[14] !== r || n[15] !== s || n[16] !== o ? (h = (d, S) => {
|
|
455
457
|
r(o, {
|
|
456
458
|
sort: {
|
|
457
459
|
...s,
|
|
458
460
|
columnId: d,
|
|
459
|
-
direction:
|
|
461
|
+
direction: S
|
|
460
462
|
}
|
|
461
|
-
}), u === "remote" && l && d && l(d,
|
|
463
|
+
}), u === "remote" && l && d && l(d, S);
|
|
462
464
|
}, n[12] = u, n[13] = l, n[14] = r, n[15] = s, n[16] = o, n[17] = h) : h = n[17];
|
|
463
|
-
const
|
|
465
|
+
const m = h;
|
|
464
466
|
let b;
|
|
465
467
|
n[18] !== a || n[19] !== r || n[20] !== o ? (b = () => {
|
|
466
468
|
const d = a(o);
|
|
@@ -475,22 +477,22 @@ function it(o, e, t) {
|
|
|
475
477
|
const C = b;
|
|
476
478
|
let v;
|
|
477
479
|
e: {
|
|
478
|
-
if (u === "remote" || !s.columnId) {
|
|
480
|
+
if (u === "remote" || !s.columnId || !s.sortEnabled) {
|
|
479
481
|
v = e;
|
|
480
482
|
break e;
|
|
481
483
|
}
|
|
482
484
|
let d;
|
|
483
485
|
n[22] !== e || n[23] !== s.columnId || n[24] !== s.direction ? (d = ye(e, s.columnId, s.direction), n[22] = e, n[23] = s.columnId, n[24] = s.direction, n[25] = d) : d = n[25], v = d;
|
|
484
486
|
}
|
|
485
|
-
const
|
|
486
|
-
let
|
|
487
|
-
return n[26] !== C || n[27] !==
|
|
487
|
+
const k = v;
|
|
488
|
+
let T;
|
|
489
|
+
return n[26] !== C || n[27] !== m || n[28] !== s || n[29] !== k || n[30] !== g ? (T = {
|
|
488
490
|
...s,
|
|
489
|
-
sortedData:
|
|
491
|
+
sortedData: k,
|
|
490
492
|
toggleSort: g,
|
|
491
|
-
setSort:
|
|
493
|
+
setSort: m,
|
|
492
494
|
clearSort: C
|
|
493
|
-
}, n[26] = C, n[27] =
|
|
495
|
+
}, n[26] = C, n[27] = m, n[28] = s, n[29] = k, n[30] = g, n[31] = T) : T = n[31], T;
|
|
494
496
|
}
|
|
495
497
|
function Re(o) {
|
|
496
498
|
return o.getWidget;
|
|
@@ -506,77 +508,77 @@ function rt(o, e) {
|
|
|
506
508
|
onSelectionChange: i
|
|
507
509
|
} = n, l = W(Le), r = W(We);
|
|
508
510
|
let a;
|
|
509
|
-
t[2] !== o ? (a = (
|
|
511
|
+
t[2] !== o ? (a = (_) => _.widgets[o]?.selected, t[2] = o, t[3] = a) : a = t[3];
|
|
510
512
|
const f = W(U(a));
|
|
511
513
|
let s;
|
|
512
514
|
t[4] !== f ? (s = f ?? /* @__PURE__ */ new Set(), t[4] = f, t[5] = s) : s = t[5];
|
|
513
515
|
const c = s;
|
|
514
516
|
let u;
|
|
515
|
-
t[6] !== c ? (u = (
|
|
517
|
+
t[6] !== c ? (u = (_) => c.has(_), t[6] = c, t[7] = u) : u = t[7];
|
|
516
518
|
const P = u;
|
|
517
519
|
let g;
|
|
518
|
-
t[8] !== c ? (g = (
|
|
520
|
+
t[8] !== c ? (g = (_) => _.length === 0 ? !1 : _.every((E) => c.has(E.id)), t[8] = c, t[9] = g) : g = t[9];
|
|
519
521
|
const h = g;
|
|
520
|
-
let
|
|
521
|
-
t[10] !== c ? (
|
|
522
|
-
if (
|
|
522
|
+
let m;
|
|
523
|
+
t[10] !== c ? (m = (_) => {
|
|
524
|
+
if (_.length === 0)
|
|
523
525
|
return !1;
|
|
524
|
-
const E =
|
|
525
|
-
return E > 0 && E <
|
|
526
|
-
}, t[10] = c, t[11] =
|
|
527
|
-
const b =
|
|
526
|
+
const E = _.filter((L) => c.has(L.id)).length;
|
|
527
|
+
return E > 0 && E < _.length;
|
|
528
|
+
}, t[10] = c, t[11] = m) : m = t[11];
|
|
529
|
+
const b = m;
|
|
528
530
|
let C;
|
|
529
|
-
t[12] !== r || t[13] !== i || t[14] !== l || t[15] !== o ? (C = (
|
|
531
|
+
t[12] !== r || t[13] !== i || t[14] !== l || t[15] !== o ? (C = (_) => {
|
|
530
532
|
const L = r(o)?.selected ?? /* @__PURE__ */ new Set(), R = new Set(L);
|
|
531
|
-
R.has(
|
|
533
|
+
R.has(_) ? R.delete(_) : R.add(_), l(o, {
|
|
532
534
|
selected: R
|
|
533
535
|
}), i && i(R);
|
|
534
536
|
}, t[12] = r, t[13] = i, t[14] = l, t[15] = o, t[16] = C) : C = t[16];
|
|
535
537
|
const v = C;
|
|
536
|
-
let
|
|
537
|
-
t[17] !== r || t[18] !== i || t[19] !== l || t[20] !== o ? (
|
|
538
|
-
const L = r(o)?.selected ?? /* @__PURE__ */ new Set(), R =
|
|
539
|
-
R ?
|
|
538
|
+
let k;
|
|
539
|
+
t[17] !== r || t[18] !== i || t[19] !== l || t[20] !== o ? (k = (_) => {
|
|
540
|
+
const L = r(o)?.selected ?? /* @__PURE__ */ new Set(), R = _.every((F) => L.has(F.id)), N = new Set(L);
|
|
541
|
+
R ? _.forEach((F) => N.delete(F.id)) : _.forEach((F) => N.add(F.id)), l(o, {
|
|
540
542
|
selected: N
|
|
541
543
|
}), i && i(N);
|
|
542
|
-
}, t[17] = r, t[18] = i, t[19] = l, t[20] = o, t[21] =
|
|
543
|
-
const
|
|
544
|
+
}, t[17] = r, t[18] = i, t[19] = l, t[20] = o, t[21] = k) : k = t[21];
|
|
545
|
+
const T = k;
|
|
544
546
|
let d;
|
|
545
|
-
t[22] !== r || t[23] !== i || t[24] !== l || t[25] !== o ? (d = (
|
|
547
|
+
t[22] !== r || t[23] !== i || t[24] !== l || t[25] !== o ? (d = (_) => {
|
|
546
548
|
const L = r(o)?.selected ?? /* @__PURE__ */ new Set(), R = new Set(L);
|
|
547
|
-
|
|
549
|
+
_.forEach((N) => R.add(N)), l(o, {
|
|
548
550
|
selected: R
|
|
549
551
|
}), i && i(R);
|
|
550
552
|
}, t[22] = r, t[23] = i, t[24] = l, t[25] = o, t[26] = d) : d = t[26];
|
|
551
|
-
const
|
|
552
|
-
let
|
|
553
|
-
t[27] !== r || t[28] !== i || t[29] !== l || t[30] !== o ? (
|
|
553
|
+
const S = d;
|
|
554
|
+
let A;
|
|
555
|
+
t[27] !== r || t[28] !== i || t[29] !== l || t[30] !== o ? (A = (_) => {
|
|
554
556
|
const L = r(o)?.selected ?? /* @__PURE__ */ new Set(), R = new Set(L);
|
|
555
|
-
|
|
557
|
+
_.forEach((N) => R.delete(N)), l(o, {
|
|
556
558
|
selected: R
|
|
557
559
|
}), i && i(R);
|
|
558
|
-
}, t[27] = r, t[28] = i, t[29] = l, t[30] = o, t[31] =
|
|
559
|
-
const
|
|
560
|
-
let
|
|
561
|
-
t[32] !== i || t[33] !== l || t[34] !== o ? (
|
|
562
|
-
const
|
|
560
|
+
}, t[27] = r, t[28] = i, t[29] = l, t[30] = o, t[31] = A) : A = t[31];
|
|
561
|
+
const y = A;
|
|
562
|
+
let w;
|
|
563
|
+
t[32] !== i || t[33] !== l || t[34] !== o ? (w = () => {
|
|
564
|
+
const _ = /* @__PURE__ */ new Set();
|
|
563
565
|
l(o, {
|
|
564
|
-
selected:
|
|
565
|
-
}), i && i(
|
|
566
|
-
}, t[32] = i, t[33] = l, t[34] = o, t[35] =
|
|
567
|
-
const $ =
|
|
566
|
+
selected: _
|
|
567
|
+
}), i && i(_);
|
|
568
|
+
}, t[32] = i, t[33] = l, t[34] = o, t[35] = w) : w = t[35];
|
|
569
|
+
const $ = w;
|
|
568
570
|
let O;
|
|
569
|
-
return t[36] !== $ || t[37] !==
|
|
571
|
+
return t[36] !== $ || t[37] !== y || t[38] !== h || t[39] !== b || t[40] !== P || t[41] !== S || t[42] !== c || t[43] !== T || t[44] !== v ? (O = {
|
|
570
572
|
selectedIds: c,
|
|
571
573
|
isSelected: P,
|
|
572
574
|
isAllSelected: h,
|
|
573
575
|
isIndeterminate: b,
|
|
574
576
|
toggleRow: v,
|
|
575
|
-
toggleAll:
|
|
576
|
-
selectRows:
|
|
577
|
-
deselectRows:
|
|
577
|
+
toggleAll: T,
|
|
578
|
+
selectRows: S,
|
|
579
|
+
deselectRows: y,
|
|
578
580
|
clearSelection: $
|
|
579
|
-
}, t[36] = $, t[37] =
|
|
581
|
+
}, t[36] = $, t[37] = y, t[38] = h, t[39] = b, t[40] = P, t[41] = S, t[42] = c, t[43] = T, t[44] = v, t[45] = O) : O = t[45], O;
|
|
580
582
|
}
|
|
581
583
|
function We(o) {
|
|
582
584
|
return o.getWidget;
|
|
@@ -590,7 +592,7 @@ function st(o) {
|
|
|
590
592
|
rows: n
|
|
591
593
|
} = o, i = t === void 0 ? 4 : t, l = n === void 0 ? 5 : n;
|
|
592
594
|
let r;
|
|
593
|
-
e[0] !== i ? (r = /* @__PURE__ */
|
|
595
|
+
e[0] !== i ? (r = /* @__PURE__ */ p(X, { children: /* @__PURE__ */ p(J, { children: Array.from({
|
|
594
596
|
length: i
|
|
595
597
|
}).map(Me) }) }), e[0] = i, e[1] = r) : r = e[1];
|
|
596
598
|
let a;
|
|
@@ -598,20 +600,20 @@ function st(o) {
|
|
|
598
600
|
length: l
|
|
599
601
|
}), e[2] = l, e[3] = a) : a = e[3];
|
|
600
602
|
let f;
|
|
601
|
-
e[4] !== i || e[5] !== a ? (f = /* @__PURE__ */
|
|
603
|
+
e[4] !== i || e[5] !== a ? (f = /* @__PURE__ */ p(Y, { children: a.map((c, u) => /* @__PURE__ */ p(J, { children: Array.from({
|
|
602
604
|
length: i
|
|
603
605
|
}).map(De) }, u)) }), e[4] = i, e[5] = a, e[6] = f) : f = e[6];
|
|
604
606
|
let s;
|
|
605
|
-
return e[7] !== r || e[8] !== f ? (s = /* @__PURE__ */
|
|
607
|
+
return e[7] !== r || e[8] !== f ? (s = /* @__PURE__ */ p(q, { "aria-label": "Table skeleton", children: /* @__PURE__ */ G(Q, { children: [
|
|
606
608
|
r,
|
|
607
609
|
f
|
|
608
610
|
] }) }), e[7] = r, e[8] = f, e[9] = s) : s = e[9], s;
|
|
609
611
|
}
|
|
610
612
|
function De(o, e) {
|
|
611
|
-
return /* @__PURE__ */
|
|
613
|
+
return /* @__PURE__ */ p(D, { children: /* @__PURE__ */ p(Z, { width: "70%", height: 20 }) }, e);
|
|
612
614
|
}
|
|
613
615
|
function Me(o, e) {
|
|
614
|
-
return /* @__PURE__ */
|
|
616
|
+
return /* @__PURE__ */ p(D, { children: /* @__PURE__ */ p(Z, { width: "80%", height: 24 }) }, e);
|
|
615
617
|
}
|
|
616
618
|
function Ne(o) {
|
|
617
619
|
const e = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table.js","sources":["../../src/widgets/table/components/cell-header.tsx","../../src/widgets/table/helpers.ts","../../src/widgets/table/components/cell.tsx","../../src/widgets/table/components/row.tsx","../../src/widgets/table/components/pagination-actions.tsx","../../src/widgets/table/components/pagination.tsx","../../src/hooks/use-widget-ref.ts","../../src/widgets/table/table-ui.tsx","../../src/widgets/table/config.ts","../../src/widgets/table/hooks/use-pagination.ts","../../src/widgets/table/hooks/use-sort.ts","../../src/widgets/table/hooks/use-selection.ts","../../src/widgets/table/skeleton.tsx","../../src/widgets/table/serializer.ts","../../src/widgets/table/style.ts"],"sourcesContent":["import { TableCell, TableSortLabel, Checkbox } from '@mui/material'\nimport type { CellHeaderProps } from '../types'\n\n/**\n * Table cell header component with optional sorting and select-all checkbox\n */\nexport function CellHeader({\n column,\n sortState,\n onSort,\n isSelectAll,\n isAllSelected,\n isIndeterminate,\n onSelectAll,\n}: CellHeaderProps) {\n // Render select-all checkbox\n if (isSelectAll) {\n return (\n <TableCell padding='checkbox'>\n <Checkbox\n checked={isAllSelected}\n indeterminate={isIndeterminate}\n onChange={onSelectAll}\n inputProps={{ 'aria-label': 'select all rows' }}\n />\n </TableCell>\n )\n }\n\n const isSorted = sortState?.columnId === column.id\n const sortDirection = isSorted ? sortState.direction : undefined\n\n // Render sortable column header\n if (column.sortable && onSort) {\n return (\n <TableCell\n align={column.align}\n style={{ width: column.width }}\n sortDirection={sortDirection}\n >\n <TableSortLabel\n active={isSorted}\n direction={sortDirection ?? 'asc'}\n onClick={() => onSort(column.id)}\n >\n {column.label}\n </TableSortLabel>\n </TableCell>\n )\n }\n\n // Render non-sortable column header\n return (\n <TableCell align={column.align} style={{ width: column.width }}>\n {column.label}\n </TableCell>\n )\n}\n","import type { ReactNode } from 'react'\n\n/**\n * Get formatted cell value for display\n * Handles primitives, arrays, objects, and custom formatters\n *\n * @param cellValue - Raw cell value\n * @param formatter - Optional formatter function\n * @returns Formatted value for display\n */\nexport function getCellValue<T>(cellValue: T): ReactNode {\n // Handle null/undefined\n if (cellValue === null || cellValue === undefined) {\n return ''\n }\n\n // Handle arrays - format as [item1, item2, ...]\n if (Array.isArray(cellValue)) {\n const formatted = cellValue\n .map((item) => (typeof item === 'string' ? `\"${item}\"` : String(item)))\n .join(', ')\n return `[${formatted}]`\n }\n\n // Handle objects - stringify to JSON\n if (typeof cellValue === 'object') {\n return JSON.stringify(cellValue)\n }\n\n // Return primitives as-is (string, number, boolean)\n return cellValue as ReactNode\n}\n\n/**\n * Compare two values for sorting\n * Handles strings, numbers, and other types\n *\n * @param a - First value\n * @param b - Second value\n * @param direction - Sort direction\n * @returns Comparison result (-1, 0, 1)\n */\nexport function compareValues(\n a: unknown,\n b: unknown,\n direction: 'asc' | 'desc',\n): number {\n // Handle null/undefined - always sort to end\n if (a === null || a === undefined) return 1\n if (b === null || b === undefined) return -1\n\n let comparison = 0\n\n if (typeof a === 'string' && typeof b === 'string') {\n comparison = a.localeCompare(b)\n } else if (typeof a === 'number' && typeof b === 'number') {\n comparison = a - b\n } else if (typeof a === 'boolean' && typeof b === 'boolean') {\n comparison = a === b ? 0 : a ? 1 : -1\n } else if (typeof a === 'object' || typeof b === 'object') {\n // Compare objects/arrays as JSON strings\n const strA = JSON.stringify(a)\n const strB = JSON.stringify(b)\n comparison = strA.localeCompare(strB)\n } else {\n // Fallback for other primitives (bigint, symbol, etc.)\n comparison = 0\n }\n\n return direction === 'asc' ? comparison : -comparison\n}\n\n/**\n * Sort data array by column\n *\n * @param data - Data array to sort\n * @param columnId - Column ID to sort by\n * @param direction - Sort direction\n * @returns Sorted data array (new array, does not mutate original)\n */\nexport function sortData<T extends Record<string, unknown>>(\n data: T[],\n columnId: string,\n direction: 'asc' | 'desc',\n): T[] {\n return [...data].sort((a, b) =>\n compareValues(a[columnId], b[columnId], direction),\n )\n}\n\n/**\n * Paginate data array\n *\n * @param data - Data array to paginate\n * @param page - Current page (0-indexed)\n * @param rowsPerPage - Number of rows per page\n * @returns Paginated data slice\n */\nexport function paginateData<T>(\n data: T[],\n page: number,\n rowsPerPage: number,\n): T[] {\n const start = page * rowsPerPage\n const end = start + rowsPerPage\n return data.slice(start, end)\n}\n","import { TableCell as MuiTableCell, Link, Typography } from '@mui/material'\nimport ReactMarkdown, { type Components } from 'react-markdown'\nimport type { TableColumn } from '../types'\nimport { getCellValue } from '../helpers'\nimport type { ReactNode } from 'react'\n\n/**\n * Props for Cell component\n */\nexport interface CellProps {\n /** Column definition */\n column: TableColumn\n /** Cell value */\n value: unknown\n}\n\nconst DEFAULT_P = ({ children }: { children?: ReactNode }) => (\n <Typography component='span' variant='body2' color='inherit'>\n {children}\n </Typography>\n)\n\n/**\n * Markdown components for cell content\n * Uses compact styling suitable for table cells (reusing Note widget pattern)\n */\nconst CELL_MARKDOWN_COMPONENTS: Components = {\n h1: DEFAULT_P,\n h2: DEFAULT_P,\n h3: DEFAULT_P,\n p: DEFAULT_P,\n a: ({ children, href }) => {\n const isExternal = href?.startsWith('http')\n return (\n <Link\n href={href}\n target={isExternal ? '_blank' : undefined}\n rel={isExternal ? 'noopener noreferrer' : undefined}\n color='text.primary'\n underline='always'\n >\n {children}\n </Link>\n )\n },\n img: () => null,\n ul: DEFAULT_P,\n ol: DEFAULT_P,\n li: DEFAULT_P,\n}\n\n/**\n * Table cell component with automatic markdown support for string values\n * Markdown is rendered when the raw value is a string and no formatter is defined.\n * If a formatter is used, its output is rendered directly without markdown parsing.\n */\nexport function Cell({ column, value }: CellProps) {\n // If formatter is defined, use it directly without markdown\n if (column.formatter) {\n return (\n <MuiTableCell align={column.align}>\n {column.formatter(value)}\n </MuiTableCell>\n )\n }\n\n // For string values without formatter, render as markdown\n if (typeof value === 'string') {\n return (\n <MuiTableCell align={column.align}>\n <ReactMarkdown components={CELL_MARKDOWN_COMPONENTS}>\n {value}\n </ReactMarkdown>\n </MuiTableCell>\n )\n }\n\n // For non-string values, render directly\n return <MuiTableCell align={column.align}>{getCellValue(value)}</MuiTableCell>\n}\n","import { TableRow as MuiTableRow, TableCell, Checkbox } from '@mui/material'\nimport type { RowProps } from '../types'\nimport { Cell } from './cell'\n\n/**\n * Table row component with selection and hover support\n */\nexport function Row({\n row,\n columns,\n isSelected = false,\n selectable = false,\n onClick,\n onSelect,\n onMouseEnter,\n onMouseLeave,\n}: RowProps) {\n const handleClick = () => {\n onClick?.(row)\n }\n\n const handleCheckboxClick = (event: React.MouseEvent) => {\n event.stopPropagation()\n onSelect?.(row)\n }\n\n const handleMouseEnter = () => {\n onMouseEnter?.(row)\n }\n\n const handleMouseLeave = () => {\n onMouseLeave?.()\n }\n\n return (\n <MuiTableRow\n hover={!!onMouseEnter || !!onMouseLeave || !!onClick}\n selected={isSelected}\n onClick={handleClick}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n sx={{\n cursor: onClick ? 'pointer' : 'default',\n }}\n >\n {selectable && (\n <TableCell padding='checkbox'>\n <Checkbox\n checked={isSelected}\n onClick={handleCheckboxClick}\n inputProps={{ 'aria-label': `select row ${row.id}` }}\n />\n </TableCell>\n )}\n {columns.map((column) => (\n <Cell key={column.id} column={column} value={row[column.id]} />\n ))}\n </MuiTableRow>\n )\n}\n","import { Box, IconButton } from '@mui/material'\nimport FirstPageIcon from '@mui/icons-material/FirstPage'\nimport KeyboardArrowLeft from '@mui/icons-material/KeyboardArrowLeft'\nimport KeyboardArrowRight from '@mui/icons-material/KeyboardArrowRight'\nimport LastPageIcon from '@mui/icons-material/LastPage'\nimport type { PaginationActionsProps } from '../types'\n\n/**\n * Custom pagination actions with first/prev/next/last buttons\n */\nexport function PaginationActions({\n count,\n page,\n rowsPerPage,\n onPageChange,\n}: PaginationActionsProps) {\n const lastPage = Math.max(0, Math.ceil(count / rowsPerPage) - 1)\n\n const handleFirstPage = (event: React.MouseEvent<HTMLButtonElement>) => {\n onPageChange(event, 0)\n }\n\n const handlePreviousPage = (event: React.MouseEvent<HTMLButtonElement>) => {\n onPageChange(event, page - 1)\n }\n\n const handleNextPage = (event: React.MouseEvent<HTMLButtonElement>) => {\n onPageChange(event, page + 1)\n }\n\n const handleLastPage = (event: React.MouseEvent<HTMLButtonElement>) => {\n onPageChange(event, lastPage)\n }\n\n return (\n <Box sx={{ flexShrink: 0, ml: 2.5 }}>\n <IconButton\n onClick={handleFirstPage}\n disabled={page === 0}\n aria-label='first page'\n >\n <FirstPageIcon />\n </IconButton>\n <IconButton\n onClick={handlePreviousPage}\n disabled={page === 0}\n aria-label='previous page'\n >\n <KeyboardArrowLeft />\n </IconButton>\n <IconButton\n onClick={handleNextPage}\n disabled={page >= lastPage}\n aria-label='next page'\n >\n <KeyboardArrowRight />\n </IconButton>\n <IconButton\n onClick={handleLastPage}\n disabled={page >= lastPage}\n aria-label='last page'\n >\n <LastPageIcon />\n </IconButton>\n </Box>\n )\n}\n","import { TablePagination as MuiTablePagination } from '@mui/material'\nimport type { PaginationProps } from '../types'\nimport { PaginationActions } from './pagination-actions'\n\n/**\n * Table pagination component\n */\nexport function Pagination({\n page,\n rowsPerPage,\n total,\n rowsPerPageOptions = [5, 10, 25, 50],\n onPageChange,\n onRowsPerPageChange,\n}: PaginationProps) {\n const handlePageChange = (\n _event: React.MouseEvent<HTMLButtonElement> | null,\n newPage: number,\n ) => {\n onPageChange(newPage)\n }\n\n const handleRowsPerPageChange = (\n event: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>,\n ) => {\n onRowsPerPageChange(parseInt(event.target.value, 10))\n }\n\n return (\n <MuiTablePagination\n component='div'\n count={total}\n page={page}\n rowsPerPage={rowsPerPage}\n rowsPerPageOptions={rowsPerPageOptions}\n onPageChange={handlePageChange}\n onRowsPerPageChange={handleRowsPerPageChange}\n ActionsComponent={PaginationActions}\n />\n )\n}\n","import { useEffect, useRef } from 'react'\nimport { useWidgetStore } from '../widgets/stores/widget-store'\n\n/**\n * Custom hook for registering a DOM element ref with the widget store.\n * This allows other parts of the application to access the widget's DOM element.\n *\n * @param widgetId - The widget ID to register the ref under\n * @returns A ref object to attach to the DOM element\n *\n * @example\n * ```tsx\n * function MyWidget({ id }: { id: string }) {\n * const ref = useWidgetRef<HTMLDivElement>(id)\n *\n * return <div ref={ref}>Widget content</div>\n * }\n * ```\n */\nexport function useWidgetRef<T extends HTMLElement = HTMLElement>(\n widgetId: string,\n) {\n const ref = useRef<T | null>(null)\n const setWidget = useWidgetStore((store) => store.setWidget)\n\n useEffect(() => {\n if (ref.current) {\n setWidget(widgetId, { refUI: ref })\n }\n }, [widgetId, setWidget])\n\n return ref\n}\n","import {\n Table as MuiTable,\n TableBody,\n TableCell,\n TableHead,\n TableContainer as MuiTableContainer,\n Paper,\n type TableProps as MuiTableProps,\n} from '@mui/material'\nimport type { Ref } from 'react'\nimport { CellHeader } from './components/cell-header'\nimport { Row } from './components/row'\nimport { Pagination } from './components/pagination'\nimport { PaginationActions } from './components/pagination-actions'\nimport { useWidgetRef } from '../../hooks'\nimport type { TableUIProps } from './types'\n\n/**\n * Props for the base Table component\n */\nexport interface TableComponentProps extends MuiTableProps {\n /** Table element ref */\n ref?: Ref<HTMLTableElement>\n}\n\n/**\n * Base Table component with compound component pattern\n * Provides Table.Head, Table.Body, Table.Row, Table.Cell, Table.CellHeader, Table.Pagination\n */\nfunction Table({\n children,\n ref,\n stickyHeader = true,\n ...props\n}: TableComponentProps) {\n return (\n <MuiTable stickyHeader={stickyHeader} ref={ref} {...props}>\n {children}\n </MuiTable>\n )\n}\n\n// Attach sub-components as static properties\nTable.Head = TableHead\nTable.CellHeader = CellHeader\nTable.Body = TableBody\nTable.Row = Row\nTable.Cell = TableCell\nTable.Container = TableContainer\nTable.Paper = Paper\nTable.Pagination = Pagination\nTable.PaginationActions = PaginationActions\n\nexport { Table }\n\n/**\n * TableContainer widget component\n * Integrates with widget store and provides ref registration using custom hook\n */\nfunction TableContainer(props: TableUIProps) {\n const ref = useWidgetRef<HTMLDivElement>(props.id)\n\n return <MuiTableContainer ref={ref}>{props.children}</MuiTableContainer>\n}\n","import { downloadToCSV, downloadToPNG } from '../actions'\nimport type { ConfigProps } from '../root/types'\nimport type {\n TableDownloadConfig,\n TableWidgetConfig,\n TableColumn,\n Mode,\n SortDirection,\n} from './types'\n\nexport const DEFAULT_MODE: Mode = 'local'\nexport const DEFAULT_PAGE = 0\nexport const DEFAULT_ROWS_PER_PAGE = 10\nexport const DEFAULT_ROWS_PER_PAGE_OPTIONS = [5, 10, 25, 50]\n\nexport const DEFAULT_COLUMN_ID = null\nexport const DEFAULT_DIRECTION: SortDirection = 'asc'\n\n/**\n * Default table download configuration\n * Supports PNG export (screenshot) and CSV export (data)\n */\nexport function tableDownloadConfig({\n refUI,\n}: ConfigProps): TableDownloadConfig {\n return [\n {\n ...downloadToPNG,\n modifier: () => downloadToPNG.modifier(refUI),\n },\n {\n ...downloadToCSV,\n modifier: async (data) => {\n if (!data?.length) {\n return downloadToCSV.modifier([])\n }\n\n // Convert table data to CSV format\n // First row contains headers (column keys)\n const firstRow = data[0]\n if (!firstRow) {\n return downloadToCSV.modifier([])\n }\n\n const headers = Object.keys(firstRow).filter((key) => key !== 'id')\n const rows = data.map((row) =>\n headers.map((header) => {\n const value = row[header]\n if (value === null || value === undefined) return ''\n if (typeof value === 'object') return JSON.stringify(value)\n return value\n }),\n )\n\n return downloadToCSV.modifier([headers, ...rows])\n },\n },\n ]\n}\n\n/**\n * Default table widget configuration\n */\nexport function tableConfig(columns: TableColumn[] = []): TableWidgetConfig {\n return {\n columns,\n selectable: false,\n selected: new Set(),\n mode: DEFAULT_MODE,\n pagination: {\n page: DEFAULT_PAGE,\n rowsPerPageOptions: DEFAULT_ROWS_PER_PAGE_OPTIONS,\n rowsPerPage: DEFAULT_ROWS_PER_PAGE,\n total: 0,\n },\n sort: {\n columnId: DEFAULT_COLUMN_ID,\n direction: DEFAULT_DIRECTION,\n },\n }\n}\n","import { useCallback, useMemo } from 'react'\nimport type { TableRow, TableWidgetState } from '../types'\nimport { paginateData } from '../helpers'\nimport { useWidgetStore } from '../../stores/widget-store'\nimport { useShallow } from 'zustand/shallow'\nimport {\n DEFAULT_PAGE,\n DEFAULT_ROWS_PER_PAGE,\n DEFAULT_ROWS_PER_PAGE_OPTIONS,\n} from '../config'\n\nexport interface UsePaginationResult<T> {\n /** Current page (0-indexed) */\n page: number\n /** Rows per page */\n rowsPerPage: number\n /** Total row count */\n total: number\n /** Available rows per page options */\n rowsPerPageOptions: number[]\n /** Paginated data (for local mode) */\n paginatedData: T[]\n /** Set current page */\n setPage: (page: number) => void\n /** Set rows per page */\n setRowsPerPage: (rowsPerPage: number) => void\n /** Go to first page */\n goToFirstPage: () => void\n /** Go to last page */\n goToLastPage: () => void\n /** Go to next page */\n goToNextPage: () => void\n /** Go to previous page */\n goToPreviousPage: () => void\n}\n\n/**\n * Hook for managing table pagination\n * Supports both local (client-side) and remote (server-side) pagination\n * State is persisted in the widget store for the given widgetId\n */\nexport function usePagination<T extends TableRow>(\n widgetId: string,\n data: T[],\n): UsePaginationResult<T> {\n // Get store actions and state\n const setWidget = useWidgetStore((state) => state.setWidget)\n const paginationState = useWidgetStore(\n useShallow((state) => {\n const widget = state.widgets[widgetId] as TableWidgetState | undefined\n return {\n page: widget?.pagination?.page ?? DEFAULT_PAGE,\n rowsPerPage: widget?.pagination?.rowsPerPage ?? DEFAULT_ROWS_PER_PAGE,\n rowsPerPageOptions:\n widget?.pagination?.rowsPerPageOptions ??\n DEFAULT_ROWS_PER_PAGE_OPTIONS,\n total: widget?.pagination?.total ?? data.length,\n } as NonNullable<Required<TableWidgetState['pagination']>>\n }),\n )\n\n const mode = useWidgetStore(\n useShallow((state) => {\n const widget = state.widgets[widgetId] as TableWidgetState | undefined\n return widget?.mode\n }),\n )\n\n // Calculate max page\n const maxPage = Math.max(\n 0,\n Math.ceil(paginationState.total / (paginationState?.rowsPerPage ?? 1)) - 1,\n )\n\n // Set page with bounds checking\n const setPage = useCallback(\n (newPage: number) => {\n const boundedPage = Math.max(0, Math.min(newPage, maxPage))\n\n setWidget<TableWidgetState>(widgetId, {\n pagination: {\n ...paginationState,\n page: boundedPage,\n },\n })\n },\n [maxPage, paginationState, setWidget, widgetId],\n )\n\n // Set rows per page and reset to first page\n const setRowsPerPage = useCallback(\n (newRowsPerPage: number) => {\n setWidget<TableWidgetState>(widgetId, {\n pagination: {\n ...paginationState,\n rowsPerPage: newRowsPerPage,\n },\n })\n },\n [paginationState, setWidget, widgetId],\n )\n\n // Navigation helpers\n const goToFirstPage = useCallback(() => setPage(0), [setPage])\n const goToLastPage = useCallback(() => setPage(maxPage), [setPage, maxPage])\n const goToNextPage = useCallback(\n () => setPage(paginationState.page + 1),\n [setPage, paginationState.page],\n )\n const goToPreviousPage = useCallback(\n () => setPage(paginationState.page - 1),\n [setPage, paginationState.page],\n )\n\n // Paginated data for local mode\n const paginatedData = useMemo(() => {\n if (mode === 'remote') {\n // For remote mode, data is already paginated from server\n return data\n }\n return paginateData(data, paginationState.page, paginationState.rowsPerPage)\n }, [data, mode, paginationState.page, paginationState.rowsPerPage])\n\n return {\n ...paginationState,\n paginatedData,\n setPage,\n setRowsPerPage,\n goToFirstPage,\n goToLastPage,\n goToNextPage,\n goToPreviousPage,\n }\n}\n","import { useCallback, useMemo } from 'react'\nimport type {\n TableRow,\n SortDirection,\n SortState,\n TableWidgetState,\n} from '../types'\nimport { sortData } from '../helpers'\nimport { useWidgetStore } from '../../stores/widget-store'\nimport { useShallow } from 'zustand/shallow'\nimport { DEFAULT_COLUMN_ID, DEFAULT_DIRECTION } from '../config'\n\nexport interface UseSortOptions {\n /** Callback when sort changes (for remote sorting) */\n onSortChange?: (columnId: string, direction: SortDirection) => void\n}\n\nexport interface UseSortResult<T> extends SortState {\n /** Current sort state */\n /** Sorted data (for local mode) */\n sortedData: T[]\n /** Toggle sort on a column */\n toggleSort: (columnId: string) => void\n /** Set sort state directly */\n setSort: (columnId: string | null, direction: SortDirection) => void\n /** Clear sort */\n clearSort: () => void\n}\n\n/**\n * Hook for managing table sorting\n * Supports both local (client-side) and remote (server-side) sorting\n * State is persisted in the widget store for the given widgetId\n */\nexport function useSort<T extends TableRow>(\n widgetId: string,\n data: T[],\n options?: UseSortOptions,\n): UseSortResult<T> {\n const { onSortChange } = options ?? {}\n\n // Get store actions and state\n const setWidget = useWidgetStore((state) => state.setWidget)\n const getWidget = useWidgetStore((state) => state.getWidget)\n const sortStoreState = useWidgetStore(\n useShallow((state) => {\n const widget = state.widgets[widgetId] as TableWidgetState | undefined\n return {\n columnId: widget?.sort?.columnId ?? DEFAULT_COLUMN_ID,\n direction: widget?.sort?.direction ?? DEFAULT_DIRECTION,\n }\n }),\n )\n\n const mode = useWidgetStore(\n useShallow((state) => {\n const widget = state.widgets[widgetId] as TableWidgetState | undefined\n return widget?.mode\n }),\n )\n\n // Toggle sort on a column\n const toggleSort = useCallback(\n (toggleColumnId: string) => {\n let newDirection: SortDirection = 'asc'\n\n if (sortStoreState.columnId === toggleColumnId) {\n // Same column - toggle direction\n newDirection = sortStoreState.direction === 'asc' ? 'desc' : 'asc'\n }\n\n setWidget<TableWidgetState>(widgetId, {\n sort: {\n ...sortStoreState,\n columnId: toggleColumnId,\n direction: newDirection,\n },\n })\n\n if (mode === 'remote' && onSortChange) {\n onSortChange(toggleColumnId, newDirection)\n }\n },\n [mode, onSortChange, setWidget, sortStoreState, widgetId],\n )\n\n // Set sort state directly\n const setSort = useCallback(\n (newColumnId: string | null, newDirection: SortDirection) => {\n setWidget<TableWidgetState>(widgetId, {\n sort: {\n ...sortStoreState,\n columnId: newColumnId,\n direction: newDirection,\n },\n })\n\n if (mode === 'remote' && onSortChange && newColumnId) {\n onSortChange(newColumnId, newDirection)\n }\n },\n [mode, onSortChange, setWidget, sortStoreState, widgetId],\n )\n\n // Clear sort\n const clearSort = useCallback(() => {\n const widget = getWidget<TableWidgetState>(widgetId)\n if (!widget?.sort) return\n\n setWidget<TableWidgetState>(widgetId, {\n sort: {\n ...widget.sort,\n columnId: null,\n direction: 'asc',\n },\n })\n }, [setWidget, getWidget, widgetId])\n\n // Sorted data for local mode\n const sortedData = useMemo(() => {\n if (mode === 'remote' || !sortStoreState.columnId) {\n // For remote mode, data is already sorted from server\n // If no sort column, return original data\n return data\n }\n return sortData(data, sortStoreState.columnId, sortStoreState.direction)\n }, [data, mode, sortStoreState.columnId, sortStoreState.direction])\n\n return {\n ...sortStoreState,\n sortedData,\n toggleSort,\n setSort,\n clearSort,\n }\n}\n","import { useCallback, useMemo } from 'react'\nimport type { TableRow, TableWidgetState } from '../types'\nimport { useWidgetStore } from '../../stores/widget-store'\nimport { useShallow } from 'zustand/shallow'\n\nexport interface UseSelectionOptions {\n /** Callback when selection changes */\n onSelectionChange?: (selectedIds: Set<string | number>) => void\n}\n\nexport interface UseSelectionResult {\n /** Set of selected row IDs */\n selectedIds: Set<string | number>\n /** Check if a row is selected */\n isSelected: (id: string | number) => boolean\n /** Check if all provided rows are selected */\n isAllSelected: (rows: TableRow[]) => boolean\n /** Check if some but not all rows are selected (for indeterminate state) */\n isIndeterminate: (rows: TableRow[]) => boolean\n /** Toggle selection of a single row */\n toggleRow: (id: string | number) => void\n /** Toggle selection of all provided rows */\n toggleAll: (rows: TableRow[]) => void\n /** Select specific rows */\n selectRows: (ids: (string | number)[]) => void\n /** Deselect specific rows */\n deselectRows: (ids: (string | number)[]) => void\n /** Clear all selections */\n clearSelection: () => void\n}\n\n/**\n * Hook for managing table row selection\n * Selection persists across pagination and is stored in the widget store\n */\nexport function useSelection(\n widgetId: string,\n options?: UseSelectionOptions,\n): UseSelectionResult {\n const { onSelectionChange } = options ?? {}\n\n // Get store actions and state\n const setWidget = useWidgetStore((state) => state.setWidget)\n const getWidget = useWidgetStore((state) => state.getWidget)\n const selected = useWidgetStore(\n useShallow((state) => {\n const widget = state.widgets[widgetId] as TableWidgetState | undefined\n return widget?.selected\n }),\n )\n\n // Use store values with fallback to empty Set\n const selectedIds = useMemo(\n () => selected ?? new Set<string | number>(),\n [selected],\n )\n\n // Check if a row is selected\n const isSelected = useCallback(\n (id: string | number) => selectedIds.has(id),\n [selectedIds],\n )\n\n // Check if all provided rows are selected\n const isAllSelected = useCallback(\n (rows: TableRow[]) => {\n if (rows.length === 0) return false\n return rows.every((row) => selectedIds.has(row.id))\n },\n [selectedIds],\n )\n\n // Check if some but not all rows are selected\n const isIndeterminate = useCallback(\n (rows: TableRow[]) => {\n if (rows.length === 0) return false\n const selectedCount = rows.filter((row) => selectedIds.has(row.id)).length\n return selectedCount > 0 && selectedCount < rows.length\n },\n [selectedIds],\n )\n\n // Toggle selection of a single row\n const toggleRow = useCallback(\n (id: string | number) => {\n const widget = getWidget<TableWidgetState>(widgetId)\n const currentSelected = widget?.selected ?? new Set<string | number>()\n\n const newSet = new Set(currentSelected)\n if (newSet.has(id)) {\n newSet.delete(id)\n } else {\n newSet.add(id)\n }\n\n setWidget<TableWidgetState>(widgetId, {\n selected: newSet,\n })\n\n if (onSelectionChange) {\n onSelectionChange(newSet)\n }\n },\n [getWidget, setWidget, widgetId, onSelectionChange],\n )\n\n // Toggle selection of all provided rows\n const toggleAll = useCallback(\n (rows: TableRow[]) => {\n const widget = getWidget<TableWidgetState>(widgetId)\n const currentSelected = widget?.selected ?? new Set<string | number>()\n\n const allSelected = rows.every((row) => currentSelected.has(row.id))\n const newSet = new Set(currentSelected)\n\n if (allSelected) {\n // Deselect all provided rows\n rows.forEach((row) => newSet.delete(row.id))\n } else {\n // Select all provided rows\n rows.forEach((row) => newSet.add(row.id))\n }\n\n setWidget<TableWidgetState>(widgetId, {\n selected: newSet,\n })\n\n if (onSelectionChange) {\n onSelectionChange(newSet)\n }\n },\n [getWidget, setWidget, widgetId, onSelectionChange],\n )\n\n // Select specific rows\n const selectRows = useCallback(\n (ids: (string | number)[]) => {\n const widget = getWidget<TableWidgetState>(widgetId)\n const currentSelected = widget?.selected ?? new Set<string | number>()\n\n const newSet = new Set(currentSelected)\n ids.forEach((id) => newSet.add(id))\n\n setWidget<TableWidgetState>(widgetId, {\n selected: newSet,\n })\n\n if (onSelectionChange) {\n onSelectionChange(newSet)\n }\n },\n [getWidget, setWidget, widgetId, onSelectionChange],\n )\n\n // Deselect specific rows\n const deselectRows = useCallback(\n (ids: (string | number)[]) => {\n const widget = getWidget<TableWidgetState>(widgetId)\n const currentSelected = widget?.selected ?? new Set<string | number>()\n\n const newSet = new Set(currentSelected)\n ids.forEach((id) => newSet.delete(id))\n\n setWidget<TableWidgetState>(widgetId, {\n selected: newSet,\n })\n\n if (onSelectionChange) {\n onSelectionChange(newSet)\n }\n },\n [getWidget, setWidget, widgetId, onSelectionChange],\n )\n\n // Clear all selections\n const clearSelection = useCallback(() => {\n const newSet = new Set<string | number>()\n\n setWidget<TableWidgetState>(widgetId, {\n selected: newSet,\n })\n\n if (onSelectionChange) {\n onSelectionChange(newSet)\n }\n }, [setWidget, widgetId, onSelectionChange])\n\n return {\n selectedIds,\n isSelected,\n isAllSelected,\n isIndeterminate,\n toggleRow,\n toggleAll,\n selectRows,\n deselectRows,\n clearSelection,\n }\n}\n","import {\n Box,\n Skeleton,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableRow,\n} from '@mui/material'\n\nexport interface TableSkeletonProps {\n /** Number of columns to display */\n columns?: number\n /** Number of rows to display */\n rows?: number\n}\n\n/**\n * Table skeleton loader component\n */\nexport function TableSkeleton({ columns = 4, rows = 5 }: TableSkeletonProps) {\n return (\n <Box aria-label='Table skeleton'>\n <Table>\n <TableHead>\n <TableRow>\n {Array.from({ length: columns }).map((_, index) => (\n <TableCell key={index}>\n <Skeleton width='80%' height={24} />\n </TableCell>\n ))}\n </TableRow>\n </TableHead>\n <TableBody>\n {Array.from({ length: rows }).map((_, rowIndex) => (\n <TableRow key={rowIndex}>\n {Array.from({ length: columns }).map((_, colIndex) => (\n <TableCell key={colIndex}>\n <Skeleton width='70%' height={20} />\n </TableCell>\n ))}\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </Box>\n )\n}\n","import type { TableRow, TableWidgetData } from './types'\n\n/**\n * Sanitizes a table row by ensuring all values are serializable.\n * Converts ReactNode and function values to undefined.\n *\n * @param row - The table row to sanitize\n * @returns A sanitized table row\n */\nexport function sanitizeTableRow(row: TableRow): TableRow {\n const sanitized: TableRow = { id: row.id }\n\n for (const [key, value] of Object.entries(row)) {\n if (key === 'id') continue\n\n // Keep primitive values\n if (\n typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'boolean' ||\n value === null\n ) {\n sanitized[key] = value\n }\n // Serialize arrays and plain objects\n else if (Array.isArray(value) || typeof value === 'object') {\n try {\n // Attempt to serialize - if it fails, the value contains non-serializable content\n JSON.stringify(value)\n sanitized[key] = value\n } catch {\n sanitized[key] = undefined\n }\n }\n // Skip functions and other non-serializable values\n else {\n sanitized[key] = undefined\n }\n }\n\n return sanitized\n}\n\n/**\n * Sanitizes table widget data by ensuring all rows are serializable.\n *\n * @param data - The table data to sanitize\n * @returns Sanitized table data\n */\nexport function sanitizeTableData(\n data: TableWidgetData | undefined,\n): TableWidgetData | undefined {\n return data?.map(sanitizeTableRow)\n}\n","import type { SxProps, Theme } from '@mui/material'\n\nexport const styles = {\n container: {\n width: '100%',\n overflow: 'auto',\n },\n table: {\n minWidth: 650,\n },\n headerCell: {\n fontWeight: 600,\n backgroundColor: (theme: Theme) => theme.palette.background.paper,\n },\n row: {\n '&:last-child td, &:last-child th': {\n border: 0,\n },\n },\n rowHover: {\n '&:hover': {\n backgroundColor: (theme: Theme) => theme.palette.action.hover,\n },\n },\n rowSelected: {\n backgroundColor: (theme: Theme) => theme.palette.action.selected,\n '&:hover': {\n backgroundColor: (theme: Theme) => theme.palette.action.selected,\n },\n },\n pagination: {\n borderTop: (theme: Theme) => `1px solid ${theme.palette.divider}`,\n },\n} satisfies Record<string, SxProps<Theme>>\n"],"names":["CellHeader","t0","$","_c","column","sortState","onSort","isSelectAll","isAllSelected","isIndeterminate","onSelectAll","t1","Symbol","for","t2","jsx","TableCell","Checkbox","isSorted","columnId","id","sortDirection","direction","undefined","sortable","width","t3","t4","label","TableSortLabel","t5","align","getCellValue","cellValue","Array","isArray","map","item","String","join","JSON","stringify","compareValues","a","b","comparison","localeCompare","strA","strB","sortData","data","sort","paginateData","page","rowsPerPage","start","end","slice","DEFAULT_P","children","Typography","CELL_MARKDOWN_COMPONENTS","h1","h2","h3","p","href","isExternal","startsWith","Link","img","ul","ol","li","Cell","value","formatter","MuiTableCell","ReactMarkdown","Row","row","columns","isSelected","selectable","onClick","onSelect","onMouseEnter","onMouseLeave","handleClick","event","stopPropagation","handleCheckboxClick","handleMouseEnter","t6","handleMouseLeave","t7","t8","t9","cursor","t10","t11","t12","MuiTableRow","PaginationActions","count","onPageChange","lastPage","Math","max","ceil","handleFirstPage","event_0","handlePreviousPage","event_1","handleNextPage","event_2","handleLastPage","flexShrink","ml","FirstPageIcon","IconButton","KeyboardArrowLeft","t13","KeyboardArrowRight","t14","t15","t16","LastPageIcon","t17","t18","jsxs","Box","Pagination","total","rowsPerPageOptions","onRowsPerPageChange","_event","newPage","handlePageChange","parseInt","target","handleRowsPerPageChange","MuiTablePagination","useWidgetRef","widgetId","ref","useRef","setWidget","useWidgetStore","_temp","current","refUI","useEffect","store","Table","props","stickyHeader","MuiTable","Head","TableHead","Body","TableBody","Container","TableContainer","Paper","MuiTableContainer","DEFAULT_MODE","DEFAULT_PAGE","DEFAULT_ROWS_PER_PAGE","DEFAULT_ROWS_PER_PAGE_OPTIONS","DEFAULT_COLUMN_ID","DEFAULT_DIRECTION","tableDownloadConfig","downloadToPNG","modifier","downloadToCSV","length","firstRow","headers","Object","keys","filter","key","rows","header","tableConfig","selected","Set","mode","pagination","usePagination","state_0","widget","state","widgets","paginationState","useShallow","state_1","maxPage","boundedPage","min","setPage","newRowsPerPage","setRowsPerPage","goToFirstPage","goToLastPage","goToNextPage","goToPreviousPage","bb0","paginatedData","useSort","options","onSortChange","getWidget","_temp2","sortStoreState","state_2","toggleColumnId","newDirection","toggleSort","newColumnId","newDirection_0","setSort","widget_1","clearSort","sortedData","useSelection","onSelectionChange","selectedIds","has","every","rows_0","selectedCount","row_0","id_0","currentSelected","newSet","delete","add","toggleRow","rows_1","currentSelected_0","allSelected","row_1","newSet_0","forEach","row_2","row_3","toggleAll","ids","currentSelected_1","newSet_1","id_1","selectRows","ids_0","currentSelected_2","newSet_2","id_2","deselectRows","newSet_3","clearSelection","TableSkeleton","TableRow","from","__0","rowIndex","__1","colIndex","Skeleton","_","index","sanitizeTableRow","sanitized","entries","sanitizeTableData","styles","container","overflow","table","minWidth","headerCell","fontWeight","backgroundColor","theme","palette","background","paper","border","rowHover","action","hover","rowSelected","borderTop","divider"],"mappings":";;;;;;;;;;;;;;;;;;AAMO,SAAAA,GAAAC,GAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GAAoB;AAAA,IAAAC,QAAAA;AAAAA,IAAAC,WAAAA;AAAAA,IAAAC,QAAAA;AAAAA,IAAAC,aAAAA;AAAAA,IAAAC,eAAAA;AAAAA,IAAAC,iBAAAA;AAAAA,IAAAC,aAAAA;AAAAA,EAAAA,IAAAT;AAUzB,MAAIM,GAAW;AAAA,QAAAI;AAAA,IAAAT,EAAA,CAAA,MAAAU,OAAAC,IAAA,2BAAA,KAOKF,IAAA;AAAA,MAAA,cAAgB;AAAA,IAAA,GAAmBT,OAAAS,KAAAA,IAAAT,EAAA,CAAA;AAAA,QAAAY;AAAA,WAAAZ,EAAA,CAAA,MAAAM,KAAAN,SAAAO,KAAAP,EAAA,CAAA,MAAAQ,KALnDI,IAAA,gBAAAC,EAACC,GAAA,EAAkB,SAAA,YACjB,UAAA,gBAAAD,EAACE,GAAA,EACUT,SAAAA,GACMC,eAAAA,GACLC,aACE,YAAAC,GAAmC,GAEnD,GAAYT,OAAAM,GAAAN,OAAAO,GAAAP,OAAAQ,GAAAR,OAAAY,KAAAA,IAAAZ,EAAA,CAAA,GAPZY;AAAAA,EAOY;AAIhB,QAAAI,IAAiBb,GAASc,aAAef,EAAMgB,IAC/CC,IAAsBH,IAAWb,EAASiB,YAApBC;AAGtB,MAAInB,EAAMoB,YAANlB,GAAyB;AAAA,QAAAK;AAAA,IAAAT,EAAA,CAAA,MAAAE,EAAAqB,SAIhBd,IAAA;AAAA,MAAAc,OAASrB,EAAMqB;AAAAA,IAAAA,GAAQvB,EAAA,CAAA,IAAAE,EAAAqB,OAAAvB,OAAAS,KAAAA,IAAAT,EAAA,CAAA;AAKjB,UAAAY,IAAAO,KAAA;AAAsB,QAAAK;AAAA,IAAAxB,SAAAE,EAAAgB,MAAAlB,SAAAI,KACxBoB,IAAAA,MAAMpB,EAAOF,EAAMgB,EAAG,GAAClB,EAAA,CAAA,IAAAE,EAAAgB,IAAAlB,OAAAI,GAAAJ,OAAAwB,KAAAA,IAAAxB,EAAA,CAAA;AAAA,QAAAyB;AAAA,IAAAzB,EAAA,EAAA,MAAAE,EAAAwB,SAAA1B,EAAA,EAAA,MAAAgB,KAAAhB,EAAA,EAAA,MAAAY,KAAAZ,UAAAwB,KAHlCC,IAAA,gBAAAZ,EAACc,MACSX,QAAAA,GACG,WAAAJ,GACF,SAAAY,GAERtB,UAAAA,EAAMwB,MAAAA,CACT,GAAiB1B,EAAA,EAAA,IAAAE,EAAAwB,OAAA1B,QAAAgB,GAAAhB,QAAAY,GAAAZ,QAAAwB,GAAAxB,QAAAyB,KAAAA,IAAAzB,EAAA,EAAA;AAAA,QAAA4B;AAAA,WAAA5B,EAAA,EAAA,MAAAE,EAAA2B,SAAA7B,EAAA,EAAA,MAAAmB,KAAAnB,EAAA,EAAA,MAAAS,KAAAT,UAAAyB,KAXnBG,IAAA,gBAAAf,EAACC,KACQ,OAAAZ,EAAM2B,OACN,OAAApB,GACQU,eAAAA,GAEfM,UAAAA,EAAAA,CAOF,GAAYzB,EAAA,EAAA,IAAAE,EAAA2B,OAAA7B,QAAAmB,GAAAnB,QAAAS,GAAAT,QAAAyB,GAAAzB,QAAA4B,KAAAA,IAAA5B,EAAA,EAAA,GAZZ4B;AAAAA,EAYY;AAEf,MAAAnB;AAAA,EAAAT,EAAA,EAAA,MAAAE,EAAAqB,SAIwCd,IAAA;AAAA,IAAAc,OAASrB,EAAMqB;AAAAA,EAAAA,GAAQvB,EAAA,EAAA,IAAAE,EAAAqB,OAAAvB,QAAAS,KAAAA,IAAAT,EAAA,EAAA;AAAA,MAAAY;AAAA,SAAAZ,EAAA,EAAA,MAAAE,EAAA2B,SAAA7B,EAAA,EAAA,MAAAE,EAAAwB,SAAA1B,UAAAS,KAA9DG,IAAA,gBAAAC,EAACC,KAAiB,OAAAZ,EAAM2B,OAAe,OAAApB,GACpCP,YAAMwB,MAAAA,CACT,GAAY1B,EAAA,EAAA,IAAAE,EAAA2B,OAAA7B,EAAA,EAAA,IAAAE,EAAAwB,OAAA1B,QAAAS,GAAAT,QAAAY,KAAAA,IAAAZ,EAAA,EAAA,GAFZY;AAEY;AC7CT,SAASkB,GAAgBC,GAAyB;AAEvD,SAAIA,KAAc,OACT,KAILC,MAAMC,QAAQF,CAAS,IAIlB,IAHWA,EACfG,IAAKC,CAAAA,MAAU,OAAOA,KAAS,WAAW,IAAIA,CAAI,MAAMC,OAAOD,CAAI,CAAE,EACrEE,KAAK,IAAI,CACQ,MAIlB,OAAON,KAAc,WAChBO,KAAKC,UAAUR,CAAS,IAI1BA;AACT;AAWO,SAASS,GACdC,GACAC,GACAtB,GACQ;AAER,MAAIqB,KAAM,KAAyB,QAAO;AAC1C,MAAIC,KAAM,KAAyB,QAAO;AAE1C,MAAIC,IAAa;AAEjB,MAAI,OAAOF,KAAM,YAAY,OAAOC,KAAM;AACxCC,IAAAA,IAAaF,EAAEG,cAAcF,CAAC;AAAA,WACrB,OAAOD,KAAM,YAAY,OAAOC,KAAM;AAC/CC,IAAAA,IAAaF,IAAIC;AAAAA,WACR,OAAOD,KAAM,aAAa,OAAOC,KAAM;AAChDC,IAAAA,IAAaF,MAAMC,IAAI,IAAID,IAAI,IAAI;AAAA,WAC1B,OAAOA,KAAM,YAAY,OAAOC,KAAM,UAAU;AAEzD,UAAMG,IAAOP,KAAKC,UAAUE,CAAC,GACvBK,IAAOR,KAAKC,UAAUG,CAAC;AAC7BC,IAAAA,IAAaE,EAAKD,cAAcE,CAAI;AAAA,EACtC;AAEEH,IAAAA,IAAa;AAGf,SAAOvB,MAAc,QAAQuB,IAAa,CAACA;AAC7C;AAUO,SAASI,GACdC,GACA/B,GACAG,GACK;AACL,SAAO,CAAC,GAAG4B,CAAI,EAAEC,KAAK,CAACR,GAAGC,MACxBF,GAAcC,EAAExB,CAAQ,GAAGyB,EAAEzB,CAAQ,GAAGG,CAAS,CACnD;AACF;AAUO,SAAS8B,GACdF,GACAG,GACAC,GACK;AACL,QAAMC,IAAQF,IAAOC,GACfE,IAAMD,IAAQD;AACpB,SAAOJ,EAAKO,MAAMF,GAAOC,CAAG;AAC9B;AC1FA,MAAME,IAAYzD,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA,GAAC;AAAA,IAAAwD,UAAAA;AAAAA,EAAAA,IAAA1D;AAAsC,MAAAU;AAAA,SAAAT,SAAAyD,KACvDhD,sBAACiD,MAAqB,WAAA,QAAe,SAAA,SAAc,OAAA,wBAEnD,GAAa1D,OAAAyD,GAAAzD,OAAAS,KAAAA,IAAAT,EAAA,CAAA,GAFbS;AAEa,GAOTkD,KAAuC;AAAA,EAC3CC,IAAIJ;AAAAA,EACJK,IAAIL;AAAAA,EACJM,IAAIN;AAAAA,EACJO,GAAGP;AAAAA,EACHf,GAAGA,CAAC;AAAA,IAAEgB,UAAAA;AAAAA,IAAUO,MAAAA;AAAAA,EAAAA,MAAW;AACzB,UAAMC,IAAaD,GAAME,WAAW,MAAM;AAC1C,WACE,gBAAArD,EAACsD,IAAA,EACC,MAAAH,GACA,QAAQC,IAAa,WAAW5C,QAChC,KAAK4C,IAAa,wBAAwB5C,QAC1C,OAAM,gBACN,WAAU,UAEToC,UAAAA,GACH;AAAA,EAEJ;AAAA,EACAW,KAAKA,MAAM;AAAA,EACXC,IAAIb;AAAAA,EACJc,IAAId;AAAAA,EACJe,IAAIf;AACN;AAOO,SAAAgB,GAAAzE,GAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GAAc;AAAA,IAAAC,QAAAA;AAAAA,IAAAuE,OAAAA;AAAAA,EAAAA,IAAA1E;AAEnB,MAAIG,EAAMwE,WAAU;AAEK,UAAAjE,IAAAP,EAAM2B;AAAM,QAAAjB;AAAA,IAAAZ,EAAA,CAAA,MAAAE,KAAAF,SAAAyE,KAC9B7D,IAAAV,EAAMwE,UAAWD,CAAK,GAACzE,OAAAE,GAAAF,OAAAyE,GAAAzE,OAAAY,KAAAA,IAAAZ,EAAA,CAAA;AAAA,QAAAwB;AAAA,WAAAxB,SAAAE,EAAA2B,SAAA7B,SAAAY,KAD1BY,IAAA,gBAAAX,EAAC8D,GAAA,EAAoB,OAAAlE,GAClBG,UAAAA,GACH,GAAeZ,EAAA,CAAA,IAAAE,EAAA2B,OAAA7B,OAAAY,GAAAZ,OAAAwB,KAAAA,IAAAxB,EAAA,CAAA,GAFfwB;AAAAA,EAEe;AAKnB,MAAI,OAAOiD,KAAU,UAAQ;AAAA,QAAAhE;AAAA,IAAAT,SAAAyE,KAGvBhE,IAAA,gBAAAI,EAAC+D,IAAA,EAA0BjB,YAAAA,IACxBc,UAAAA,GACH,GAAgBzE,OAAAyE,GAAAzE,OAAAS,KAAAA,IAAAT,EAAA,CAAA;AAAA,QAAAY;AAAA,WAAAZ,SAAAE,EAAA2B,SAAA7B,SAAAS,KAHlBG,sBAAC+D,GAAA,EAAoB,OAAAzE,EAAM2B,OACzBpB,UAAAA,GAGF,GAAeT,EAAA,CAAA,IAAAE,EAAA2B,OAAA7B,OAAAS,GAAAT,QAAAY,KAAAA,IAAAZ,EAAA,EAAA,GAJfY;AAAAA,EAIe;AAKS,QAAAH,IAAAP,EAAM2B;AAAM,MAAAjB;AAAA,EAAAZ,UAAAyE,KAAG7D,IAAAkB,GAAa2C,CAAK,GAACzE,QAAAyE,GAAAzE,QAAAY,KAAAA,IAAAZ,EAAA,EAAA;AAAA,MAAAwB;AAAA,SAAAxB,UAAAE,EAAA2B,SAAA7B,UAAAY,KAAvDY,IAAA,gBAAAX,EAAC8D,GAAA,EAAoB,OAAAlE,GAAeG,UAAAA,GAAoB,GAAeZ,EAAA,EAAA,IAAAE,EAAA2B,OAAA7B,QAAAY,GAAAZ,QAAAwB,KAAAA,IAAAxB,EAAA,EAAA,GAAvEwB;AAAuE;ACvEzE,SAAAqD,GAAA9E,GAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GAAa;AAAA,IAAA6E,KAAAA;AAAAA,IAAAC,SAAAA;AAAAA,IAAAC,YAAAvE;AAAAA,IAAAwE,YAAArE;AAAAA,IAAAsE,SAAAA;AAAAA,IAAAC,UAAAA;AAAAA,IAAAC,cAAAA;AAAAA,IAAAC,cAAAA;AAAAA,EAAAA,IAAAtF,GAGlBiF,IAAAvE,MAAAY,SAAA,KAAAZ,GACAwE,IAAArE,MAAAS,SAAA,KAAAT;AAAkB,MAAAY;AAAA,EAAAxB,EAAA,CAAA,MAAAkF,KAAAlF,SAAA8E,KAMEtD,IAAAA,MAAA;AAClB0D,IAAAA,IAAUJ,CAAG;AAAA,EAAC,GACf9E,OAAAkF,GAAAlF,OAAA8E,GAAA9E,OAAAwB,KAAAA,IAAAxB,EAAA,CAAA;AAFD,QAAAsF,IAAoB9D;AAEnB,MAAAC;AAAA,EAAAzB,EAAA,CAAA,MAAAmF,KAAAnF,SAAA8E,KAE2BrD,IAAA8D,CAAAA,MAAA;AAC1BA,IAAAA,EAAKC,gBAAAA,GACLL,IAAWL,CAAG;AAAA,EAAC,GAChB9E,OAAAmF,GAAAnF,OAAA8E,GAAA9E,OAAAyB,KAAAA,IAAAzB,EAAA,CAAA;AAHD,QAAAyF,IAA4BhE;AAG3B,MAAAG;AAAA,EAAA5B,EAAA,CAAA,MAAAoF,KAAApF,SAAA8E,KAEwBlD,IAAAA,MAAA;AACvBwD,IAAAA,IAAeN,CAAG;AAAA,EAAC,GACpB9E,OAAAoF,GAAApF,OAAA8E,GAAA9E,OAAA4B,KAAAA,IAAA5B,EAAA,CAAA;AAFD,QAAA0F,IAAyB9D;AAExB,MAAA+D;AAAA,EAAA3F,SAAAqF,KAEwBM,IAAAA,MAAA;AACvBN,IAAAA,IAAAA;AAAAA,EAAgB,GACjBrF,OAAAqF,GAAArF,QAAA2F,KAAAA,IAAA3F,EAAA,EAAA;AAFD,QAAA4F,IAAyBD,GAMdE,IAAA,CAAC,CAACT,KAAF,CAAmB,CAACC,KAApB,CAAqC,CAACH,GAMnCY,IAAAZ,IAAA,YAAA;AAA+B,MAAAa;AAAA,EAAA/F,UAAA8F,KADrCC,IAAA;AAAA,IAAAC,QACMF;AAAAA,EAAAA,GACT9F,QAAA8F,GAAA9F,QAAA+F,KAAAA,IAAA/F,EAAA,EAAA;AAAA,MAAAiG;AAAA,EAAAjG,EAAA,EAAA,MAAAyF,KAAAzF,EAAA,EAAA,MAAAgF,KAAAhF,EAAA,EAAA,MAAA8E,KAAA9E,UAAAiF,KAEAgB,IAAAhB,KACC,gBAAApE,EAACC,GAAA,EAAkB,SAAA,YACjB,UAAA,gBAAAD,EAACE,GAAA,EACUiE,SAAAA,GACAS,SAAAA,GACG,YAAA;AAAA,IAAA,cAAgB,cAAcX,EAAG5D,EAAG;AAAA,EAAA,GAAI,EAAA,CAExD,GACDlB,QAAAyF,GAAAzF,QAAAgF,GAAAhF,QAAA8E,GAAA9E,QAAAiF,GAAAjF,QAAAiG,KAAAA,IAAAjG,EAAA,EAAA;AAAA,MAAAkG;AAAA,MAAAlG,EAAA,EAAA,MAAA+E,KAAA/E,UAAA8E,GAAA;AAAA,QAAAqB;AAAA,IAAAnG,UAAA8E,KACYqB,IAAAjG,CAAAA,MACX,gBAAAW,EAAC2D,IAAA,EAA6BtE,QAAAA,GAAe,OAAA4E,EAAI5E,EAAMgB,EAAG,EAAA,GAA/ChB,EAAMgB,EAA0C,GAC5DlB,QAAA8E,GAAA9E,QAAAmG,KAAAA,IAAAnG,EAAA,EAAA,GAFAkG,IAAAnB,EAAO7C,IAAKiE,CAEZ,GAACnG,QAAA+E,GAAA/E,QAAA8E,GAAA9E,QAAAkG;AAAAA,EAAA;AAAAA,IAAAA,IAAAlG,EAAA,EAAA;AAAA,MAAAmG;AAAA,SAAAnG,EAAA,EAAA,MAAAsF,KAAAtF,EAAA,EAAA,MAAA0F,KAAA1F,EAAA,EAAA,MAAA4F,KAAA5F,EAAA,EAAA,MAAAgF,KAAAhF,EAAA,EAAA,MAAAiG,KAAAjG,EAAA,EAAA,MAAAkG,KAAAlG,EAAA,EAAA,MAAA6F,KAAA7F,UAAA+F,KArBJI,sBAACC,GAAA,EACQ,OAAAP,GACGb,UAAAA,GACDM,SAAAA,GACKI,iBACAE,cAAAA,GACV,IAAAG,GAIHE,UAAAA;AAAAA,IAAAA;AAAAA,IASAC;AAAAA,EAAAA,GAGH,GAAclG,QAAAsF,GAAAtF,QAAA0F,GAAA1F,QAAA4F,GAAA5F,QAAAgF,GAAAhF,QAAAiG,GAAAjG,QAAAkG,GAAAlG,QAAA6F,GAAA7F,QAAA+F,GAAA/F,QAAAmG,KAAAA,IAAAnG,EAAA,EAAA,GAtBdmG;AAsBc;AC/CX,SAAAE,EAAAtG,GAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GAA2B;AAAA,IAAAqG,OAAAA;AAAAA,IAAAnD,MAAAA;AAAAA,IAAAC,aAAAA;AAAAA,IAAAmD,cAAAA;AAAAA,EAAAA,IAAAxG,GAMhCyG,IAAiBC,KAAIC,IAAK,GAAGD,KAAIE,KAAML,IAAQlD,CAAW,IAAI,CAAC;AAAC,MAAA3C;AAAA,EAAAT,SAAAuG,KAExC9F,IAAA8E,CAAAA,MAAA;AACtBgB,IAAAA,EAAahB,GAAO,CAAC;AAAA,EAAC,GACvBvF,OAAAuG,GAAAvG,OAAAS,KAAAA,IAAAT,EAAA,CAAA;AAFD,QAAA4G,IAAwBnG;AAEvB,MAAAG;AAAA,EAAAZ,EAAA,CAAA,MAAAuG,KAAAvG,SAAAmD,KAE0BvC,IAAAiG,CAAAA,MAAA;AACzBN,IAAAA,EAAahB,GAAOpC,IAAO,CAAC;AAAA,EAAC,GAC9BnD,OAAAuG,GAAAvG,OAAAmD,GAAAnD,OAAAY,KAAAA,IAAAZ,EAAA,CAAA;AAFD,QAAA8G,IAA2BlG;AAE1B,MAAAY;AAAA,EAAAxB,EAAA,CAAA,MAAAuG,KAAAvG,SAAAmD,KAEsB3B,IAAAuF,CAAAA,MAAA;AACrBR,IAAAA,EAAahB,GAAOpC,IAAO,CAAC;AAAA,EAAC,GAC9BnD,OAAAuG,GAAAvG,OAAAmD,GAAAnD,OAAAwB,KAAAA,IAAAxB,EAAA,CAAA;AAFD,QAAAgH,IAAuBxF;AAEtB,MAAAC;AAAA,EAAAzB,EAAA,CAAA,MAAAwG,KAAAxG,SAAAuG,KAEsB9E,IAAAwF,CAAAA,MAAA;AACrBV,IAAAA,EAAahB,GAAOiB,CAAQ;AAAA,EAAC,GAC9BxG,OAAAwG,GAAAxG,OAAAuG,GAAAvG,QAAAyB,KAAAA,IAAAzB,EAAA,EAAA;AAFD,QAAAkH,IAAuBzF;AAEtB,MAAAG;AAAA,EAAA5B,EAAA,EAAA,MAAAU,OAAAC,IAAA,2BAAA,KAGUiB,IAAA;AAAA,IAAAuF,YAAc;AAAA,IAACC,IAAM;AAAA,EAAA,GAAKpH,QAAA4B,KAAAA,IAAA5B,EAAA,EAAA;AAGrB,QAAA2F,IAAAxC,MAAS;AAAC,MAAA0C;AAAA,EAAA7F,EAAA,EAAA,MAAAU,OAAAC,IAAA,2BAAA,KAGpBkF,sBAACwB,IAAA,EAAa,GAAGrH,QAAA6F,KAAAA,IAAA7F,EAAA,EAAA;AAAA,MAAA8F;AAAA,EAAA9F,EAAA,EAAA,MAAA4G,KAAA5G,UAAA2F,KALnBG,IAAA,gBAAAjF,EAACyG,KACUV,SAAAA,GACC,UAAAjB,GACC,cAAA,cAEXE,UAAAA,EAAAA,CACF,GAAa7F,QAAA4G,GAAA5G,QAAA2F,GAAA3F,QAAA8F,KAAAA,IAAA9F,EAAA,EAAA;AAGD,QAAA+F,IAAA5C,MAAS;AAAC,MAAA8C;AAAA,EAAAjG,EAAA,EAAA,MAAAU,OAAAC,IAAA,2BAAA,KAGpBsF,sBAACsB,IAAA,EAAiB,GAAGvH,QAAAiG,KAAAA,IAAAjG,EAAA,EAAA;AAAA,MAAAkG;AAAA,EAAAlG,EAAA,EAAA,MAAA8G,KAAA9G,UAAA+F,KALvBG,IAAA,gBAAArF,EAACyG,KACUR,SAAAA,GACC,UAAAf,GACC,cAAA,iBAEXE,UAAAA,EAAAA,CACF,GAAajG,QAAA8G,GAAA9G,QAAA+F,GAAA/F,QAAAkG,KAAAA,IAAAlG,EAAA,EAAA;AAGD,QAAAmG,IAAAhD,KAAQqD;AAAQ,MAAAgB;AAAA,EAAAxH,EAAA,EAAA,MAAAU,OAAAC,IAAA,2BAAA,KAG1B6G,sBAACC,IAAA,EAAkB,GAAGzH,QAAAwH,KAAAA,IAAAxH,EAAA,EAAA;AAAA,MAAA0H;AAAA,EAAA1H,EAAA,EAAA,MAAAgH,KAAAhH,UAAAmG,KALxBuB,IAAA,gBAAA7G,EAACyG,KACUN,SAAAA,GACC,UAAAb,GACC,cAAA,aAEXqB,UAAAA,EAAAA,CACF,GAAaxH,QAAAgH,GAAAhH,QAAAmG,GAAAnG,QAAA0H,KAAAA,IAAA1H,EAAA,EAAA;AAGD,QAAA2H,IAAAxE,KAAQqD;AAAQ,MAAAoB;AAAA,EAAA5H,EAAA,EAAA,MAAAU,OAAAC,IAAA,2BAAA,KAG1BiH,sBAACC,IAAA,EAAY,GAAG7H,QAAA4H,KAAAA,IAAA5H,EAAA,EAAA;AAAA,MAAA8H;AAAA,EAAA9H,EAAA,EAAA,MAAAkH,KAAAlH,UAAA2H,KALlBG,IAAA,gBAAAjH,EAACyG,KACUJ,SAAAA,GACC,UAAAS,GACC,cAAA,aAEXC,UAAAA,EAAAA,CACF,GAAa5H,QAAAkH,GAAAlH,QAAA2H,GAAA3H,QAAA8H,KAAAA,IAAA9H,EAAA,EAAA;AAAA,MAAA+H;AAAA,SAAA/H,EAAA,EAAA,MAAAkG,KAAAlG,EAAA,EAAA,MAAA0H,KAAA1H,EAAA,EAAA,MAAA8H,KAAA9H,UAAA8F,KA5BfiC,IAAA,gBAAAC,EAACC,GAAA,EAAQ,IAAArG,GACPkE,UAAAA;AAAAA,IAAAA;AAAAA,IAOAI;AAAAA,IAOAwB;AAAAA,IAOAI;AAAAA,EAAAA,GAOF,GAAM9H,QAAAkG,GAAAlG,QAAA0H,GAAA1H,QAAA8H,GAAA9H,QAAA8F,GAAA9F,QAAA+H,KAAAA,IAAA/H,EAAA,EAAA,GA7BN+H;AA6BM;ACzDH,SAAAG,GAAAnI,GAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GAAoB;AAAA,IAAAkD,MAAAA;AAAAA,IAAAC,aAAAA;AAAAA,IAAA+E,OAAAA;AAAAA,IAAAC,oBAAA3H;AAAAA,IAAA8F,cAAAA;AAAAA,IAAA8B,qBAAAA;AAAAA,EAAAA,IAAAtI;AAOT,MAAAa;AAAA,EAAAZ,SAAAS,KAHhBG,IAAAH,MAAAY,SAAA,CAAsB,GAAG,IAAI,IAAI,EAAE,IAAnCZ,GAAoCT,OAAAS,GAAAT,OAAAY,KAAAA,IAAAZ,EAAA,CAAA;AAApC,QAAAoI,IAAAxH;AAAoC,MAAAY;AAAA,EAAAxB,SAAAuG,KAIX/E,IAAAA,CAAA8G,GAAAC,MAAA;AAIvBhC,IAAAA,EAAagC,CAAO;AAAA,EAAC,GACtBvI,OAAAuG,GAAAvG,OAAAwB,KAAAA,IAAAxB,EAAA,CAAA;AALD,QAAAwI,IAAyBhH;AAKxB,MAAAC;AAAA,EAAAzB,SAAAqI,KAE+B5G,IAAA8D,CAAAA,MAAA;AAG9B8C,IAAAA,EAAoBI,SAASlD,EAAKmD,OAAOjE,OAAQ,EAAE,CAAC;AAAA,EAAC,GACtDzE,OAAAqI,GAAArI,OAAAyB,KAAAA,IAAAzB,EAAA,CAAA;AAJD,QAAA2I,IAAgClH;AAI/B,MAAAG;AAAA,SAAA5B,SAAAwI,KAAAxI,EAAA,CAAA,MAAA2I,KAAA3I,EAAA,CAAA,MAAAmD,KAAAnD,EAAA,CAAA,MAAAoD,KAAApD,UAAAoI,KAAApI,EAAA,EAAA,MAAAmI,KAGCvG,sBAACgH,IAAA,EACW,WAAA,OACHT,OAAAA,GACDhF,MAAAA,GACOC,aAAAA,GACOgF,oBAAAA,GACNI,cAAAA,GACOG,wBACHtC,kBAAAA,GAAiB,GACnCrG,OAAAwI,GAAAxI,OAAA2I,GAAA3I,OAAAmD,GAAAnD,OAAAoD,GAAApD,QAAAoI,GAAApI,QAAAmI,GAAAnI,QAAA4B,KAAAA,IAAA5B,EAAA,EAAA,GATF4B;AASE;ACnBC,SAAAiH,GAAAC,GAAA;AAAA,QAAA9I,IAAAC,EAAA,CAAA,GAGL8I,IAAYC,GAAiB,IAAI,GACjCC,IAAkBC,EAAeC,EAA0B;AAAC,MAAApJ,GAAAU;AAAA,SAAAT,EAAA,CAAA,MAAAiJ,KAAAjJ,SAAA8I,KAElD/I,IAAAA,MAAA;AACR,IAAIgJ,EAAGK,WACLH,EAAUH,GAAU;AAAA,MAAAO,OAASN;AAAAA,IAAAA,CAAK;AAAA,EACnC,GACAtI,IAAA,CAACqI,GAAUG,CAAS,GAACjJ,OAAAiJ,GAAAjJ,OAAA8I,GAAA9I,OAAAD,GAAAC,OAAAS,MAAAV,IAAAC,EAAA,CAAA,GAAAS,IAAAT,EAAA,CAAA,IAJxBsJ,GAAUvJ,GAIPU,CAAqB,GAEjBsI;AAAG;AAZL,SAAAI,GAAAI,GAAA;AAAA,SAIuCA,EAAKN;AAAU;ACM7D,SAAAO,EAAAzJ,GAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA;AAAA,MAAAwD,GAAAgG,GAAAV,GAAAtI;AAAA,EAAAT,SAAAD,KAAe;AAAA,IAAA0D,UAAAA;AAAAA,IAAAsF,KAAAA;AAAAA,IAAAW,cAAAjJ;AAAAA,IAAA,GAAAgJ;AAAAA,EAAAA,IAAA1J,GAKOC,OAAAD,GAAAC,OAAAyD,GAAAzD,OAAAyJ,GAAAzJ,OAAA+I,GAAA/I,OAAAS,MAAAgD,IAAAzD,EAAA,CAAA,GAAAyJ,IAAAzJ,EAAA,CAAA,GAAA+I,IAAA/I,EAAA,CAAA,GAAAS,IAAAT,EAAA,CAAA;AAFpB,QAAA0J,IAAAjJ,MAAAY,SAAA,KAAAZ;AAAmB,MAAAG;AAAA,SAAAZ,EAAA,CAAA,MAAAyD,KAAAzD,EAAA,CAAA,MAAAyJ,KAAAzJ,EAAA,CAAA,MAAA+I,KAAA/I,SAAA0J,KAIjB9I,sBAAC+I,GAAA,EAAuBD,cAAAA,GAAmBX,KAAAA,MAASU,gBAEpD,GAAWzJ,OAAAyD,GAAAzD,OAAAyJ,GAAAzJ,OAAA+I,GAAA/I,OAAA0J,GAAA1J,OAAAY,KAAAA,IAAAZ,EAAA,CAAA,GAFXY;AAEW;AAKf4I,EAAMI,OAAOC;AACbL,EAAM1J,aAAaA;AACnB0J,EAAMM,OAAOC;AACbP,EAAM3E,MAAMA;AACZ2E,EAAMhF,OAAO1D;AACb0I,EAAMQ,YAAYC;AAClBT,EAAMU,QAAQA;AACdV,EAAMtB,aAAaA;AACnBsB,EAAMnD,oBAAoBA;AAQ1B,SAAA4D,GAAAR,GAAA;AAAA,QAAAzJ,IAAAC,EAAA,CAAA,GACE8I,IAAYF,GAA6BY,EAAKvI,EAAG;AAAC,MAAAnB;AAAA,SAAAC,SAAAyJ,EAAAhG,YAAAzD,SAAA+I,KAE3ChJ,IAAA,gBAAAc,EAACsJ,IAAA,EAAuBpB,KAAAA,GAAMU,UAAAA,EAAKhG,UAAU,GAAoBzD,EAAA,CAAA,IAAAyJ,EAAAhG,UAAAzD,OAAA+I,GAAA/I,OAAAD,KAAAA,IAAAC,EAAA,CAAA,GAAjED;AAAiE;ACpDnE,MAAMqK,KAAqB,SACrBC,IAAe,GACfC,KAAwB,IACxBC,KAAgC,CAAC,GAAG,IAAI,IAAI,EAAE,GAE9CC,KAAoB,MACpBC,KAAmC;AAMzC,SAASC,GAAoB;AAAA,EAClCrB,OAAAA;AACW,GAAwB;AACnC,SAAO,CACL;AAAA,IACE,GAAGsB;AAAAA,IACHC,UAAUA,MAAMD,EAAcC,SAASvB,CAAK;AAAA,EAAA,GAE9C;AAAA,IACE,GAAGwB;AAAAA,IACHD,UAAU,OAAO5H,MAAS;AACxB,UAAI,CAACA,GAAM8H;AACT,eAAOD,EAAcD,SAAS,EAAE;AAKlC,YAAMG,IAAW/H,EAAK,CAAC;AACvB,UAAI,CAAC+H;AACH,eAAOF,EAAcD,SAAS,EAAE;AAGlC,YAAMI,IAAUC,OAAOC,KAAKH,CAAQ,EAAEI,OAAQC,CAAAA,MAAQA,MAAQ,IAAI,GAC5DC,IAAOrI,EAAKd,IAAK4C,CAAAA,MACrBkG,EAAQ9I,IAAKoJ,CAAAA,MAAW;AACtB,cAAM7G,IAAQK,EAAIwG,CAAM;AACxB,eAAI7G,KAAU,OAAoC,KAC9C,OAAOA,KAAU,WAAiBnC,KAAKC,UAAUkC,CAAK,IACnDA;AAAAA,MACT,CAAC,CACH;AAEA,aAAOoG,EAAcD,SAAS,CAACI,GAAS,GAAGK,CAAI,CAAC;AAAA,IAClD;AAAA,EAAA,CACD;AAEL;AAKO,SAASE,GAAYxG,IAAyB,IAAuB;AAC1E,SAAO;AAAA,IACLA,SAAAA;AAAAA,IACAE,YAAY;AAAA,IACZuG,8BAAcC,IAAAA;AAAAA,IACdC,MAAMtB;AAAAA,IACNuB,YAAY;AAAA,MACVxI,MAAMkH;AAAAA,MACNjC,oBAAoBmC;AAAAA,MACpBnH,aAAakH;AAAAA,MACbnC,OAAO;AAAA,IAAA;AAAA,IAETlF,MAAM;AAAA,MACJhC,UAAUuJ;AAAAA,MACVpJ,WAAWqJ;AAAAA,IAAAA;AAAAA,EACb;AAEJ;ACvCO,SAAAmB,GAAA9C,GAAA9F,GAAA;AAAA,QAAAhD,IAAAC,EAAA,EAAA,GAKLgJ,IAAkBC,EAAeC,EAA0B;AAAC,MAAApJ;AAAA,EAAAC,EAAA,CAAA,MAAAgD,KAAAhD,SAAA8I,KAE/C/I,IAAA8L,CAAAA,MAAA;AACT,UAAAC,IAAeC,EAAKC,QAASlD,CAAQ;AAAiC,WAC/D;AAAA,MAAA3F,MACC2I,GAAMH,YAAkBxI,QAAxBkH;AAAAA,MAAwCjH,aACjC0I,GAAMH,YAAyBvI,eAA/BkH;AAAAA,MAAwDlC,oBAEnE0D,GAAMH,YAAgCvD,sBAAtCmC;AAAAA,MAC6BpC,OACxB2D,GAAMH,YAAmBxD,SAAInF,EAAI8H;AAAAA,IAAAA;AAAAA,EACgB,GAC3D9K,OAAAgD,GAAAhD,OAAA8I,GAAA9I,OAAAD,KAAAA,IAAAC,EAAA,CAAA;AAXH,QAAAiM,IAAwB/C,EACtBgD,EAAWnM,CAUV,CACH;AAAC,MAAAU;AAAA,EAAAT,SAAA8I,KAGYrI,IAAA0L,CAAAA,MACMJ,EAAKC,QAASlD,CAAQ,GACxB4C,MACd1L,OAAA8I,GAAA9I,OAAAS,KAAAA,IAAAT,EAAA,CAAA;AAJH,QAAA0L,IAAaxC,EACXgD,EAAWzL,CAGV,CACH,GAGA2L,IAAgB3F,KAAIC,IAClB,GACAD,KAAIE,KAAMsF,EAAe9D,SAAU8D,GAAe7I,eAAf,EAAkC,IAAI,CAC3E;AAAC,MAAAxC;AAAA,EAAAZ,EAAA,CAAA,MAAAoM,KAAApM,EAAA,CAAA,MAAAiM,KAAAjM,EAAA,CAAA,MAAAiJ,KAAAjJ,SAAA8I,KAIClI,IAAA2H,CAAAA,MAAA;AACE,UAAA8D,IAAoB5F,KAAIC,IAAK,GAAGD,KAAI6F,IAAK/D,GAAS6D,CAAO,CAAC;AAE1DnD,IAAAA,EAA4BH,GAAU;AAAA,MAAA6C,YACxB;AAAA,QAAA,GACPM;AAAAA,QAAe9I,MACZkJ;AAAAA,MAAAA;AAAAA,IACR,CACD;AAAA,EAAC,GACHrM,OAAAoM,GAAApM,OAAAiM,GAAAjM,OAAAiJ,GAAAjJ,OAAA8I,GAAA9I,OAAAY,KAAAA,IAAAZ,EAAA,CAAA;AAVH,QAAAuM,IAAgB3L;AAYf,MAAAY;AAAA,EAAAxB,EAAA,EAAA,MAAAiM,KAAAjM,UAAAiJ,KAAAjJ,EAAA,EAAA,MAAA8I,KAICtH,IAAAgL,CAAAA,MAAA;AACEvD,IAAAA,EAA4BH,GAAU;AAAA,MAAA6C,YACxB;AAAA,QAAA,GACPM;AAAAA,QAAe7I,aACLoJ;AAAAA,MAAAA;AAAAA,IACf,CACD;AAAA,EAAC,GACHxM,QAAAiM,GAAAjM,QAAAiJ,GAAAjJ,QAAA8I,GAAA9I,QAAAwB,KAAAA,IAAAxB,EAAA,EAAA;AARH,QAAAyM,IAAuBjL;AAUtB,MAAAC;AAAA,EAAAzB,UAAAuM,KAGiC9K,IAAAA,MAAM8K,EAAQ,CAAC,GAACvM,QAAAuM,GAAAvM,QAAAyB,KAAAA,IAAAzB,EAAA,EAAA;AAAlD,QAAA0M,IAAsBjL;AAAwC,MAAAG;AAAA,EAAA5B,EAAA,EAAA,MAAAoM,KAAApM,UAAAuM,KAC7B3K,IAAAA,MAAM2K,EAAQH,CAAO,GAACpM,QAAAoM,GAAApM,QAAAuM,GAAAvM,QAAA4B,KAAAA,IAAA5B,EAAA,EAAA;AAAvD,QAAA2M,IAAqB/K;AAAuD,MAAA+D;AAAA,EAAA3F,UAAAiM,EAAA9I,QAAAnD,UAAAuM,KAE1E5G,IAAAA,MAAM4G,EAAQN,EAAe9I,OAAQ,CAAC,GAACnD,EAAA,EAAA,IAAAiM,EAAA9I,MAAAnD,QAAAuM,GAAAvM,QAAA2F,KAAAA,IAAA3F,EAAA,EAAA;AADzC,QAAA4M,IAAqBjH;AAGpB,MAAAE;AAAA,EAAA7F,UAAAiM,EAAA9I,QAAAnD,UAAAuM,KAEC1G,IAAAA,MAAM0G,EAAQN,EAAe9I,OAAQ,CAAC,GAACnD,EAAA,EAAA,IAAAiM,EAAA9I,MAAAnD,QAAAuM,GAAAvM,QAAA6F,KAAAA,IAAA7F,EAAA,EAAA;AADzC,QAAA6M,IAAyBhH;AAGxB,MAAAC;AAAAgH,EAAAA,GAAA;AAIC,QAAIpB,MAAS,UAAQ;AAEnB5F,MAAAA,IAAO9C;AAAP,YAAA8J;AAAAA,IAAW;AACZ,QAAA/G;AAAA,IAAA/F,EAAA,EAAA,MAAAgD,KAAAhD,EAAA,EAAA,MAAAiM,EAAA9I,QAAAnD,EAAA,EAAA,MAAAiM,EAAA7I,eACM2C,IAAA7C,GAAaF,GAAMiJ,EAAe9I,MAAO8I,EAAe7I,WAAY,GAACpD,QAAAgD,GAAAhD,EAAA,EAAA,IAAAiM,EAAA9I,MAAAnD,EAAA,EAAA,IAAAiM,EAAA7I,aAAApD,QAAA+F,KAAAA,IAAA/F,EAAA,EAAA,GAA5E8F,IAAOC;AAAAA,EAAqE;AAL9E,QAAAgH,IAAsBjH;AAM6C,MAAAC;AAAA,SAAA/F,EAAA,EAAA,MAAA0M,KAAA1M,EAAA,EAAA,MAAA2M,KAAA3M,EAAA,EAAA,MAAA4M,KAAA5M,EAAA,EAAA,MAAA6M,KAAA7M,EAAA,EAAA,MAAA+M,KAAA/M,EAAA,EAAA,MAAAiM,KAAAjM,EAAA,EAAA,MAAAuM,KAAAvM,UAAAyM,KAE5D1G,IAAA;AAAA,IAAA,GACFkG;AAAAA,IAAec,eAAAA;AAAAA,IAAAR,SAAAA;AAAAA,IAAAE,gBAAAA;AAAAA,IAAAC,eAAAA;AAAAA,IAAAC,cAAAA;AAAAA,IAAAC,cAAAA;AAAAA,IAAAC,kBAAAA;AAAAA,EAAAA,GAQnB7M,QAAA0M,GAAA1M,QAAA2M,GAAA3M,QAAA4M,GAAA5M,QAAA6M,GAAA7M,QAAA+M,GAAA/M,QAAAiM,GAAAjM,QAAAuM,GAAAvM,QAAAyM,GAAAzM,QAAA+F,KAAAA,IAAA/F,EAAA,EAAA,GATM+F;AASN;AA3FI,SAAAoD,GAAA4C,GAAA;AAAA,SAKuCA,EAAK9C;AAAU;ACZtD,SAAA+D,GAAAlE,GAAA9F,GAAAiK,GAAA;AAAA,QAAAjN,IAAAC,EAAA,EAAA;AAAA,MAAAF;AAAA,EAAAC,SAAAiN,KAKoBlN,IAAAkN,KAAA,CAAA,GAAajN,OAAAiN,GAAAjN,OAAAD,KAAAA,IAAAC,EAAA,CAAA;AAAtC,QAAA;AAAA,IAAAkN,cAAAA;AAAAA,EAAAA,IAAyBnN,GAGzBkJ,IAAkBC,EAAeC,EAA0B,GAC3DgE,IAAkBjE,EAAekE,EAA0B;AAAC,MAAA3M;AAAA,EAAAT,SAAA8I,KAE/CrI,IAAA0L,CAAAA,MAAA;AACT,UAAAL,IAAeC,EAAKC,QAASlD,CAAQ;AAAiC,WAC/D;AAAA,MAAA7H,UACK6K,GAAM7I,MAAgBhC,YAAtBuJ;AAAAA,MAA2CpJ,WAC1C0K,GAAM7I,MAAiB7B,aAAvBqJ;AAAAA,IAAAA;AAAAA,EACZ,GACFzK,OAAA8I,GAAA9I,OAAAS,KAAAA,IAAAT,EAAA,CAAA;AAPH,QAAAqN,IAAuBnE,EACrBgD,EAAWzL,CAMV,CACH;AAAC,MAAAG;AAAA,EAAAZ,SAAA8I,KAGYlI,IAAA0M,CAAAA,MACMvB,EAAKC,QAASlD,CAAQ,GACxB4C,MACd1L,OAAA8I,GAAA9I,OAAAY,KAAAA,IAAAZ,EAAA,CAAA;AAJH,QAAA0L,IAAaxC,EACXgD,EAAWtL,CAGV,CACH;AAAC,MAAAY;AAAA,EAAAxB,EAAA,CAAA,MAAA0L,KAAA1L,EAAA,CAAA,MAAAkN,KAAAlN,EAAA,CAAA,MAAAiJ,KAAAjJ,EAAA,CAAA,MAAAqN,KAAArN,UAAA8I,KAICtH,IAAA+L,CAAAA,MAAA;AACE,QAAAC,IAAkC;AAElC,IAAIH,EAAcpM,aAAcsM,MAE9BC,IAAeH,EAAcjM,cAAe,QAA7B,SAAA,QAGjB6H,EAA4BH,GAAU;AAAA,MAAA7F,MAC9B;AAAA,QAAA,GACDoK;AAAAA,QAAcpM,UACPsM;AAAAA,QAAcnM,WACboM;AAAAA,MAAAA;AAAAA,IACb,CACD,GAEG9B,MAAS,YAATwB,KACFA,EAAaK,GAAgBC,CAAY;AAAA,EAC1C,GACFxN,OAAA0L,GAAA1L,OAAAkN,GAAAlN,OAAAiJ,GAAAjJ,OAAAqN,GAAArN,QAAA8I,GAAA9I,QAAAwB,KAAAA,IAAAxB,EAAA,EAAA;AApBH,QAAAyN,IAAmBjM;AAsBlB,MAAAC;AAAA,EAAAzB,EAAA,EAAA,MAAA0L,KAAA1L,EAAA,EAAA,MAAAkN,KAAAlN,EAAA,EAAA,MAAAiJ,KAAAjJ,EAAA,EAAA,MAAAqN,KAAArN,UAAA8I,KAICrH,IAAAA,CAAAiM,GAAAC,MAAA;AACE1E,IAAAA,EAA4BH,GAAU;AAAA,MAAA7F,MAC9B;AAAA,QAAA,GACDoK;AAAAA,QAAcpM,UACPyM;AAAAA,QAAWtM,WACVoM;AAAAA,MAAAA;AAAAA,IACb,CACD,GAEG9B,MAAS,YAATwB,KAAAQ,KACFR,EAAaQ,GAAaF,CAAY;AAAA,EACvC,GACFxN,QAAA0L,GAAA1L,QAAAkN,GAAAlN,QAAAiJ,GAAAjJ,QAAAqN,GAAArN,QAAA8I,GAAA9I,QAAAyB,KAAAA,IAAAzB,EAAA,EAAA;AAbH,QAAA4N,IAAgBnM;AAef,MAAAG;AAAA,EAAA5B,EAAA,EAAA,MAAAmN,KAAAnN,UAAAiJ,KAAAjJ,EAAA,EAAA,MAAA8I,KAG6BlH,IAAAA,MAAA;AAC5B,UAAAiM,IAAeV,EAA4BrE,CAAQ;AACnD,IAAKgD,GAAM7I,QAEXgG,EAA4BH,GAAU;AAAA,MAAA7F,MAC9B;AAAA,QAAA,GACD6I,EAAM7I;AAAAA,QAAKhC,UACJ;AAAA,QAAIG,WACH;AAAA,MAAA;AAAA,IACb,CACD;AAAA,EAAC,GACHpB,QAAAmN,GAAAnN,QAAAiJ,GAAAjJ,QAAA8I,GAAA9I,QAAA4B,KAAAA,IAAA5B,EAAA,EAAA;AAXD,QAAA8N,IAAkBlM;AAWkB,MAAA+D;AAAAmH,EAAAA,GAAA;AAIlC,QAAIpB,MAAS,YAAT,CAAsB2B,EAAcpM,UAAS;AAG/C0E,MAAAA,IAAO3C;AAAP,YAAA8J;AAAAA,IAAW;AACZ,QAAAjH;AAAA,IAAA7F,EAAA,EAAA,MAAAgD,KAAAhD,EAAA,EAAA,MAAAqN,EAAApM,YAAAjB,EAAA,EAAA,MAAAqN,EAAAjM,aACMyE,IAAA9C,GAASC,GAAMqK,EAAcpM,UAAWoM,EAAcjM,SAAU,GAACpB,QAAAgD,GAAAhD,EAAA,EAAA,IAAAqN,EAAApM,UAAAjB,EAAA,EAAA,IAAAqN,EAAAjM,WAAApB,QAAA6F,KAAAA,IAAA7F,EAAA,EAAA,GAAxE2F,IAAOE;AAAAA,EAAiE;AAN1E,QAAAkI,IAAmBpI;AAOgD,MAAAE;AAAA,SAAA7F,EAAA,EAAA,MAAA8N,KAAA9N,EAAA,EAAA,MAAA4N,KAAA5N,EAAA,EAAA,MAAAqN,KAAArN,EAAA,EAAA,MAAA+N,KAAA/N,UAAAyN,KAE5D5H,IAAA;AAAA,IAAA,GACFwH;AAAAA,IAAcU,YAAAA;AAAAA,IAAAN,YAAAA;AAAAA,IAAAG,SAAAA;AAAAA,IAAAE,WAAAA;AAAAA,EAAAA,GAKlB9N,QAAA8N,GAAA9N,QAAA4N,GAAA5N,QAAAqN,GAAArN,QAAA+N,GAAA/N,QAAAyN,GAAAzN,QAAA6F,KAAAA,IAAA7F,EAAA,EAAA,GANM6F;AAMN;AApGI,SAAAuH,GAAAvB,GAAA;AAAA,SASuCE,EAAKoB;AAAU;AATtD,SAAAhE,GAAA4C,GAAA;AAAA,SAQuCA,EAAK9C;AAAU;ACPtD,SAAA+E,GAAAlF,GAAAmE,GAAA;AAAA,QAAAjN,IAAAC,EAAA,EAAA;AAAA,MAAAF;AAAA,EAAAC,SAAAiN,KAIyBlN,IAAAkN,KAAA,CAAA,GAAajN,OAAAiN,GAAAjN,OAAAD,KAAAA,IAAAC,EAAA,CAAA;AAA3C,QAAA;AAAA,IAAAiO,mBAAAA;AAAAA,EAAAA,IAA8BlO,GAG9BkJ,IAAkBC,EAAeC,EAA0B,GAC3DgE,IAAkBjE,EAAekE,EAA0B;AAAC,MAAA3M;AAAA,EAAAT,SAAA8I,KAE/CrI,IAAA0L,CAAAA,MACMJ,EAAKC,QAASlD,CAAQ,GACxB0C,UACdxL,OAAA8I,GAAA9I,OAAAS,KAAAA,IAAAT,EAAA,CAAA;AAJH,QAAAwL,IAAiBtC,EACfgD,EAAWzL,CAGV,CACH;AAAC,MAAAG;AAAA,EAAAZ,SAAAwL,KAIO5K,IAAA4K,yBAAgBC,IAAAA,GAAsBzL,OAAAwL,GAAAxL,OAAAY,KAAAA,IAAAZ,EAAA,CAAA;AAD9C,QAAAkO,IACQtN;AAEP,MAAAY;AAAA,EAAAxB,SAAAkO,KAIC1M,IAAAN,CAAAA,MAAyBgN,EAAWC,IAAKjN,CAAE,GAAClB,OAAAkO,GAAAlO,OAAAwB,KAAAA,IAAAxB,EAAA,CAAA;AAD9C,QAAAgF,IAAmBxD;AAGlB,MAAAC;AAAA,EAAAzB,SAAAkO,KAICzM,IAAA4J,CAAAA,MACMA,EAAIP,WAAY,IAAU,KACvBO,EAAI+C,MAAOtJ,CAAAA,MAASoJ,EAAWC,IAAKrJ,EAAG5D,EAAG,CAAC,GACnDlB,OAAAkO,GAAAlO,OAAAyB,KAAAA,IAAAzB,EAAA,CAAA;AAJH,QAAAM,IAAsBmB;AAMrB,MAAAG;AAAA,EAAA5B,UAAAkO,KAICtM,IAAAyM,CAAAA,MAAA;AACE,QAAIhD,EAAIP,WAAY;AAAC,aAAS;AAC9B,UAAAwD,IAAsBjD,EAAIF,OAAQoD,CAAAA,MAASL,EAAWC,IAAKrJ,EAAG5D,EAAG,CAAC,EAAC4J;AAAO,WACnEwD,IAAgB,KAAKA,IAAgBjD,EAAIP;AAAAA,EAAO,GACxD9K,QAAAkO,GAAAlO,QAAA4B,KAAAA,IAAA5B,EAAA,EAAA;AALH,QAAAO,IAAwBqB;AAOvB,MAAA+D;AAAA,EAAA3F,EAAA,EAAA,MAAAmN,KAAAnN,EAAA,EAAA,MAAAiO,KAAAjO,EAAA,EAAA,MAAAiJ,KAAAjJ,UAAA8I,KAICnD,IAAA6I,CAAAA,MAAA;AAEE,UAAAC,IADetB,EAA4BrE,CAAQ,GACrB0C,YAAN,oBAAwBC,IAAAA,GAEhDiD,IAAe,IAAIjD,IAAIgD,CAAe;AACtC,IAAIC,EAAMP,IAAKjN,CAAE,IACfwN,EAAMC,OAAQzN,CAAE,IAEhBwN,EAAME,IAAK1N,CAAE,GAGf+H,EAA4BH,GAAU;AAAA,MAAA0C,UAC1BkD;AAAAA,IAAAA,CACX,GAEGT,KACFA,EAAkBS,CAAM;AAAA,EACzB,GACF1O,QAAAmN,GAAAnN,QAAAiO,GAAAjO,QAAAiJ,GAAAjJ,QAAA8I,GAAA9I,QAAA2F,KAAAA,IAAA3F,EAAA,EAAA;AAnBH,QAAA6O,IAAkBlJ;AAqBjB,MAAAE;AAAA,EAAA7F,EAAA,EAAA,MAAAmN,KAAAnN,EAAA,EAAA,MAAAiO,KAAAjO,EAAA,EAAA,MAAAiJ,KAAAjJ,UAAA8I,KAICjD,IAAAiJ,CAAAA,MAAA;AAEE,UAAAC,IADe5B,EAA4BrE,CAAQ,GACrB0C,YAAN,oBAAwBC,IAAAA,GAEhDuD,IAAoB3D,EAAI+C,MAAOa,CAAAA,MAASR,EAAeN,IAAKrJ,EAAG5D,EAAG,CAAC,GACnEgO,IAAe,IAAIzD,IAAIgD,CAAe;AAEtC,IAAIO,IAEF3D,EAAI8D,QAASC,CAAAA,MAASV,EAAMC,OAAQ7J,EAAG5D,EAAG,CAAC,IAG3CmK,EAAI8D,QAASE,CAAAA,MAASX,EAAME,IAAK9J,EAAG5D,EAAG,CAAC,GAG1C+H,EAA4BH,GAAU;AAAA,MAAA0C,UAC1BkD;AAAAA,IAAAA,CACX,GAEGT,KACFA,EAAkBS,CAAM;AAAA,EACzB,GACF1O,QAAAmN,GAAAnN,QAAAiO,GAAAjO,QAAAiJ,GAAAjJ,QAAA8I,GAAA9I,QAAA6F,KAAAA,IAAA7F,EAAA,EAAA;AAvBH,QAAAsP,IAAkBzJ;AAyBjB,MAAAC;AAAA,EAAA9F,EAAA,EAAA,MAAAmN,KAAAnN,EAAA,EAAA,MAAAiO,KAAAjO,EAAA,EAAA,MAAAiJ,KAAAjJ,UAAA8I,KAIChD,IAAAyJ,CAAAA,MAAA;AAEE,UAAAC,IADerC,EAA4BrE,CAAQ,GACrB0C,YAAN,oBAAwBC,IAAAA,GAEhDgE,IAAe,IAAIhE,IAAIgD,CAAe;AACtCc,IAAAA,EAAGJ,QAASO,CAAAA,MAAQhB,EAAME,IAAK1N,CAAE,CAAC,GAElC+H,EAA4BH,GAAU;AAAA,MAAA0C,UAC1BkD;AAAAA,IAAAA,CACX,GAEGT,KACFA,EAAkBS,CAAM;AAAA,EACzB,GACF1O,QAAAmN,GAAAnN,QAAAiO,GAAAjO,QAAAiJ,GAAAjJ,QAAA8I,GAAA9I,QAAA8F,KAAAA,IAAA9F,EAAA,EAAA;AAfH,QAAA2P,IAAmB7J;AAiBlB,MAAAC;AAAA,EAAA/F,EAAA,EAAA,MAAAmN,KAAAnN,EAAA,EAAA,MAAAiO,KAAAjO,EAAA,EAAA,MAAAiJ,KAAAjJ,UAAA8I,KAIC/C,IAAA6J,CAAAA,MAAA;AAEE,UAAAC,IADe1C,EAA4BrE,CAAQ,GACrB0C,YAAN,oBAAwBC,IAAAA,GAEhDqE,IAAe,IAAIrE,IAAIgD,CAAe;AACtCc,IAAAA,EAAGJ,QAASY,CAAAA,MAAQrB,EAAMC,OAAQzN,CAAE,CAAC,GAErC+H,EAA4BH,GAAU;AAAA,MAAA0C,UAC1BkD;AAAAA,IAAAA,CACX,GAEGT,KACFA,EAAkBS,CAAM;AAAA,EACzB,GACF1O,QAAAmN,GAAAnN,QAAAiO,GAAAjO,QAAAiJ,GAAAjJ,QAAA8I,GAAA9I,QAAA+F,KAAAA,IAAA/F,EAAA,EAAA;AAfH,QAAAgQ,IAAqBjK;AAiBpB,MAAAE;AAAA,EAAAjG,EAAA,EAAA,MAAAiO,KAAAjO,UAAAiJ,KAAAjJ,EAAA,EAAA,MAAA8I,KAGkC7C,IAAAA,MAAA;AACjC,UAAAgK,wBAAmBxE,IAAAA;AAEnBxC,IAAAA,EAA4BH,GAAU;AAAA,MAAA0C,UAC1BkD;AAAAA,IAAAA,CACX,GAEGT,KACFA,EAAkBS,CAAM;AAAA,EACzB,GACF1O,QAAAiO,GAAAjO,QAAAiJ,GAAAjJ,QAAA8I,GAAA9I,QAAAiG,KAAAA,IAAAjG,EAAA,EAAA;AAVD,QAAAkQ,IAAuBjK;AAUqB,MAAAC;AAAA,SAAAlG,EAAA,EAAA,MAAAkQ,KAAAlQ,EAAA,EAAA,MAAAgQ,KAAAhQ,UAAAM,KAAAN,EAAA,EAAA,MAAAO,KAAAP,EAAA,EAAA,MAAAgF,KAAAhF,EAAA,EAAA,MAAA2P,KAAA3P,EAAA,EAAA,MAAAkO,KAAAlO,EAAA,EAAA,MAAAsP,KAAAtP,UAAA6O,KAErC3I,IAAA;AAAA,IAAAgI,aAAAA;AAAAA,IAAAlJ,YAAAA;AAAAA,IAAA1E,eAAAA;AAAAA,IAAAC,iBAAAA;AAAAA,IAAAsO,WAAAA;AAAAA,IAAAS,WAAAA;AAAAA,IAAAK,YAAAA;AAAAA,IAAAK,cAAAA;AAAAA,IAAAE,gBAAAA;AAAAA,EAAAA,GAUNlQ,QAAAkQ,GAAAlQ,QAAAgQ,GAAAhQ,QAAAM,GAAAN,QAAAO,GAAAP,QAAAgF,GAAAhF,QAAA2P,GAAA3P,QAAAkO,GAAAlO,QAAAsP,GAAAtP,QAAA6O,GAAA7O,QAAAkG,KAAAA,IAAAlG,EAAA,EAAA,GAVMkG;AAUN;AAlKI,SAAAkH,GAAAvB,GAAA;AAAA,SAQuCE,EAAKoB;AAAU;AARtD,SAAAhE,GAAA4C,GAAA;AAAA,SAOuCA,EAAK9C;AAAU;ACtBtD,SAAAkH,GAAApQ,GAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GAAuB;AAAA,IAAA8E,SAAAtE;AAAAA,IAAA4K,MAAAzK;AAAAA,EAAAA,IAAAb,GAAEgF,IAAAtE,MAAAY,SAAA,IAAAZ,GAAa4K,IAAAzK,MAAAS,SAAA,IAAAT;AAAQ,MAAAY;AAAA,EAAAxB,SAAA+E,KAI7CvD,IAAA,gBAAAX,EAACgJ,GAAA,EACC,UAAA,gBAAAhJ,EAACuP,GAAA,EACEpO,gBAAKqO,KAAM;AAAA,IAAAvF,QAAU/F;AAAAA,EAAAA,CAAS,EAAC7C,IAAKiH,EAIpC,GACH,EAAA,CACF,GAAYnJ,OAAA+E,GAAA/E,OAAAwB,KAAAA,IAAAxB,EAAA,CAAA;AAAA,MAAAyB;AAAA,EAAAzB,SAAAqL,KAET5J,IAAAO,MAAKqO,KAAM;AAAA,IAAAvF,QAAUO;AAAAA,EAAAA,CAAM,GAACrL,OAAAqL,GAAArL,OAAAyB,KAAAA,IAAAzB,EAAA,CAAA;AAAA,MAAA4B;AAAA,EAAA5B,EAAA,CAAA,MAAA+E,KAAA/E,SAAAyB,KAD/BG,IAAA,gBAAAf,EAACkJ,GAAA,EACEtI,UAAAA,EAA4BS,IAAK,CAAAoO,GAAAC,MAChC,gBAAA1P,EAACuP,GAAA,EACEpO,UAAAA,MAAKqO,KAAM;AAAA,IAAAvF,QAAU/F;AAAAA,EAAAA,CAAS,EAAC7C,IAAKkL,EAIpC,EAAA,GALYmD,CAMf,CACD,EAAA,CACH,GAAYvQ,OAAA+E,GAAA/E,OAAAyB,GAAAzB,OAAA4B,KAAAA,IAAA5B,EAAA,CAAA;AAAA,MAAA2F;AAAA,SAAA3F,EAAA,CAAA,MAAAwB,KAAAxB,SAAA4B,KArBhB+D,IAAA,gBAAA9E,EAACoH,GAAA,EAAe,cAAA,kBACd,4BAACuB,GAAA,EACChI,UAAAA;AAAAA,IAAAA;AAAAA,IASAI;AAAAA,EAAAA,EAAAA,CAWF,EAAA,CACF,GAAM5B,OAAAwB,GAAAxB,OAAA4B,GAAA5B,OAAA2F,KAAAA,IAAA3F,EAAA,CAAA,GAvBN2F;AAuBM;AAzBH,SAAAyH,GAAAoD,GAAAC,GAAA;AAAA,SAiBS,gBAAA5P,EAACC,KACC,UAAA,gBAAAD,EAAC6P,GAAA,EAAe,OAAA,OAAc,YAAE,EAAA,GADlBD,CAEhB;AAAY;AAnBrB,SAAAtH,GAAAwH,GAAAC,GAAA;AAAA,SAOO,gBAAA/P,EAACC,KACC,UAAA,gBAAAD,EAAC6P,GAAA,EAAe,OAAA,OAAc,YAAE,EAAA,GADlBE,CAEhB;AAAY;ACpBnB,SAASC,GAAiB/L,GAAyB;AACxD,QAAMgM,IAAsB;AAAA,IAAE5P,IAAI4D,EAAI5D;AAAAA,EAAAA;AAEtC,aAAW,CAACkK,GAAK3G,CAAK,KAAKwG,OAAO8F,QAAQjM,CAAG;AAC3C,QAAIsG,MAAQ;AAGZ,UACE,OAAO3G,KAAU,YACjB,OAAOA,KAAU,YACjB,OAAOA,KAAU,aACjBA,MAAU;AAEVqM,QAAAA,EAAU1F,CAAG,IAAI3G;AAAAA,eAGVzC,MAAMC,QAAQwC,CAAK,KAAK,OAAOA,KAAU;AAChD,YAAI;AAEFnC,eAAKC,UAAUkC,CAAK,GACpBqM,EAAU1F,CAAG,IAAI3G;AAAAA,QACnB,QAAQ;AACNqM,UAAAA,EAAU1F,CAAG,IAAI/J;AAAAA,QACnB;AAAA;AAIAyP,QAAAA,EAAU1F,CAAG,IAAI/J;AAIrB,SAAOyP;AACT;AAQO,SAASE,GACdhO,GAC6B;AAC7B,SAAOA,GAAMd,IAAI2O,EAAgB;AACnC;ACnDO,MAAMI,KAAS;AAAA,EACpBC,WAAW;AAAA,IACT3P,OAAO;AAAA,IACP4P,UAAU;AAAA,EAAA;AAAA,EAEZC,OAAO;AAAA,IACLC,UAAU;AAAA,EAAA;AAAA,EAEZC,YAAY;AAAA,IACVC,YAAY;AAAA,IACZC,iBAAiBA,CAACC,MAAiBA,EAAMC,QAAQC,WAAWC;AAAAA,EAAAA;AAAAA,EAE9D9M,KAAK;AAAA,IACH,oCAAoC;AAAA,MAClC+M,QAAQ;AAAA,IAAA;AAAA,EACV;AAAA,EAEFC,UAAU;AAAA,IACR,WAAW;AAAA,MACTN,iBAAiBA,CAACC,MAAiBA,EAAMC,QAAQK,OAAOC;AAAAA,IAAAA;AAAAA,EAC1D;AAAA,EAEFC,aAAa;AAAA,IACXT,iBAAiBA,CAACC,MAAiBA,EAAMC,QAAQK,OAAOvG;AAAAA,IACxD,WAAW;AAAA,MACTgG,iBAAiBA,CAACC,MAAiBA,EAAMC,QAAQK,OAAOvG;AAAAA,IAAAA;AAAAA,EAC1D;AAAA,EAEFG,YAAY;AAAA,IACVuG,WAAWA,CAACT,MAAiB,aAAaA,EAAMC,QAAQS,OAAO;AAAA,EAAA;AAEnE;"}
|
|
1
|
+
{"version":3,"file":"table.js","sources":["../../src/widgets/table/components/cell-header.tsx","../../src/widgets/table/helpers.ts","../../src/widgets/table/components/cell.tsx","../../src/widgets/table/components/row.tsx","../../src/widgets/table/components/pagination-actions.tsx","../../src/widgets/table/components/pagination.tsx","../../src/hooks/use-widget-ref.ts","../../src/widgets/table/table-ui.tsx","../../src/widgets/table/config.ts","../../src/widgets/table/hooks/use-pagination.ts","../../src/widgets/table/hooks/use-sort.ts","../../src/widgets/table/hooks/use-selection.ts","../../src/widgets/table/skeleton.tsx","../../src/widgets/table/serializer.ts","../../src/widgets/table/style.ts"],"sourcesContent":["import { TableCell, TableSortLabel, Checkbox } from '@mui/material'\nimport type { CellHeaderProps } from '../types'\n\n/**\n * Table cell header component with optional sorting and select-all checkbox\n */\nexport function CellHeader({\n column,\n sortState,\n onSort,\n isSelectAll,\n isAllSelected,\n isIndeterminate,\n onSelectAll,\n}: CellHeaderProps) {\n // Render select-all checkbox\n if (isSelectAll) {\n return (\n <TableCell padding='checkbox'>\n <Checkbox\n checked={isAllSelected}\n indeterminate={isIndeterminate}\n onChange={onSelectAll}\n inputProps={{ 'aria-label': 'select all rows' }}\n />\n </TableCell>\n )\n }\n\n const isSorted = sortState?.columnId === column.id\n const sortDirection = isSorted ? sortState.direction : undefined\n\n // Render sortable column header\n if (column.sortable && onSort) {\n return (\n <TableCell\n align={column.align}\n style={{ width: column.width }}\n sortDirection={sortDirection}\n >\n <TableSortLabel\n active={isSorted}\n direction={sortDirection ?? 'asc'}\n onClick={() => onSort(column.id)}\n >\n {column.label}\n </TableSortLabel>\n </TableCell>\n )\n }\n\n // Render non-sortable column header\n return (\n <TableCell align={column.align} style={{ width: column.width }}>\n {column.label}\n </TableCell>\n )\n}\n","import type { ReactNode } from 'react'\n\n/**\n * Get formatted cell value for display\n * Handles primitives, arrays, objects, and custom formatters\n *\n * @param cellValue - Raw cell value\n * @param formatter - Optional formatter function\n * @returns Formatted value for display\n */\nexport function getCellValue<T>(cellValue: T): ReactNode {\n // Handle null/undefined\n if (cellValue === null || cellValue === undefined) {\n return ''\n }\n\n // Handle arrays - format as [item1, item2, ...]\n if (Array.isArray(cellValue)) {\n const formatted = cellValue\n .map((item) => (typeof item === 'string' ? `\"${item}\"` : String(item)))\n .join(', ')\n return `[${formatted}]`\n }\n\n // Handle objects - stringify to JSON\n if (typeof cellValue === 'object') {\n return JSON.stringify(cellValue)\n }\n\n // Return primitives as-is (string, number, boolean)\n return cellValue as ReactNode\n}\n\n/**\n * Compare two values for sorting\n * Handles strings, numbers, and other types\n *\n * @param a - First value\n * @param b - Second value\n * @param direction - Sort direction\n * @returns Comparison result (-1, 0, 1)\n */\nexport function compareValues(\n a: unknown,\n b: unknown,\n direction: 'asc' | 'desc',\n): number {\n // Handle null/undefined - always sort to end\n if (a === null || a === undefined) return 1\n if (b === null || b === undefined) return -1\n\n let comparison = 0\n\n if (typeof a === 'string' && typeof b === 'string') {\n comparison = a.localeCompare(b)\n } else if (typeof a === 'number' && typeof b === 'number') {\n comparison = a - b\n } else if (typeof a === 'boolean' && typeof b === 'boolean') {\n comparison = a === b ? 0 : a ? 1 : -1\n } else if (typeof a === 'object' || typeof b === 'object') {\n // Compare objects/arrays as JSON strings\n const strA = JSON.stringify(a)\n const strB = JSON.stringify(b)\n comparison = strA.localeCompare(strB)\n } else {\n // Fallback for other primitives (bigint, symbol, etc.)\n comparison = 0\n }\n\n return direction === 'asc' ? comparison : -comparison\n}\n\n/**\n * Sort data array by column\n *\n * @param data - Data array to sort\n * @param columnId - Column ID to sort by\n * @param direction - Sort direction\n * @returns Sorted data array (new array, does not mutate original)\n */\nexport function sortData<T extends Record<string, unknown>>(\n data: T[],\n columnId: string,\n direction: 'asc' | 'desc',\n): T[] {\n return [...data].sort((a, b) =>\n compareValues(a[columnId], b[columnId], direction),\n )\n}\n\n/**\n * Paginate data array\n *\n * @param data - Data array to paginate\n * @param page - Current page (0-indexed)\n * @param rowsPerPage - Number of rows per page\n * @returns Paginated data slice\n */\nexport function paginateData<T>(\n data: T[],\n page: number,\n rowsPerPage: number,\n): T[] {\n const start = page * rowsPerPage\n const end = start + rowsPerPage\n return data.slice(start, end)\n}\n","import { TableCell as MuiTableCell, Link, Typography } from '@mui/material'\nimport ReactMarkdown, { type Components } from 'react-markdown'\nimport type { TableColumn } from '../types'\nimport { getCellValue } from '../helpers'\nimport type { ReactNode } from 'react'\n\n/**\n * Props for Cell component\n */\nexport interface CellProps {\n /** Column definition */\n column: TableColumn\n /** Cell value */\n value: unknown\n}\n\nconst DEFAULT_P = ({ children }: { children?: ReactNode }) => (\n <Typography component='span' variant='body2' color='inherit'>\n {children}\n </Typography>\n)\n\n/**\n * Markdown components for cell content\n * Uses compact styling suitable for table cells (reusing Note widget pattern)\n */\nconst CELL_MARKDOWN_COMPONENTS: Components = {\n h1: DEFAULT_P,\n h2: DEFAULT_P,\n h3: DEFAULT_P,\n p: DEFAULT_P,\n a: ({ children, href }) => {\n const isExternal = href?.startsWith('http')\n return (\n <Link\n href={href}\n target={isExternal ? '_blank' : undefined}\n rel={isExternal ? 'noopener noreferrer' : undefined}\n color='text.primary'\n underline='always'\n >\n {children}\n </Link>\n )\n },\n img: () => null,\n ul: DEFAULT_P,\n ol: DEFAULT_P,\n li: DEFAULT_P,\n}\n\n/**\n * Table cell component with automatic markdown support for string values\n * Markdown is rendered when the raw value is a string and no formatter is defined.\n * If a formatter is used, its output is rendered directly without markdown parsing.\n */\nexport function Cell({ column, value }: CellProps) {\n // If formatter is defined, use it directly without markdown\n if (column.formatter) {\n return (\n <MuiTableCell align={column.align}>\n {column.formatter(value)}\n </MuiTableCell>\n )\n }\n\n // For string values without formatter, render as markdown\n if (typeof value === 'string') {\n return (\n <MuiTableCell align={column.align}>\n <ReactMarkdown components={CELL_MARKDOWN_COMPONENTS}>\n {value}\n </ReactMarkdown>\n </MuiTableCell>\n )\n }\n\n // For non-string values, render directly\n return <MuiTableCell align={column.align}>{getCellValue(value)}</MuiTableCell>\n}\n","import { TableRow as MuiTableRow, TableCell, Checkbox } from '@mui/material'\nimport type { RowProps } from '../types'\nimport { Cell } from './cell'\n\n/**\n * Table row component with selection and hover support\n */\nexport function Row({\n row,\n columns,\n isSelected = false,\n selectable = false,\n onClick,\n onSelect,\n onMouseEnter,\n onMouseLeave,\n}: RowProps) {\n const handleClick = () => {\n onClick?.(row)\n }\n\n const handleCheckboxClick = (event: React.MouseEvent) => {\n event.stopPropagation()\n onSelect?.(row)\n }\n\n const handleMouseEnter = () => {\n onMouseEnter?.(row)\n }\n\n const handleMouseLeave = () => {\n onMouseLeave?.()\n }\n\n return (\n <MuiTableRow\n hover={!!onMouseEnter || !!onMouseLeave || !!onClick}\n selected={isSelected}\n onClick={handleClick}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n sx={{\n cursor: onClick ? 'pointer' : 'default',\n }}\n >\n {selectable && (\n <TableCell padding='checkbox'>\n <Checkbox\n checked={isSelected}\n onClick={handleCheckboxClick}\n inputProps={{ 'aria-label': `select row ${row.id}` }}\n />\n </TableCell>\n )}\n {columns.map((column) => (\n <Cell key={column.id} column={column} value={row[column.id]} />\n ))}\n </MuiTableRow>\n )\n}\n","import { Box, IconButton } from '@mui/material'\nimport FirstPageIcon from '@mui/icons-material/FirstPage'\nimport KeyboardArrowLeft from '@mui/icons-material/KeyboardArrowLeft'\nimport KeyboardArrowRight from '@mui/icons-material/KeyboardArrowRight'\nimport LastPageIcon from '@mui/icons-material/LastPage'\nimport type { PaginationActionsProps } from '../types'\n\n/**\n * Custom pagination actions with first/prev/next/last buttons\n */\nexport function PaginationActions({\n count,\n page,\n rowsPerPage,\n onPageChange,\n}: PaginationActionsProps) {\n const lastPage = Math.max(0, Math.ceil(count / rowsPerPage) - 1)\n\n const handleFirstPage = (event: React.MouseEvent<HTMLButtonElement>) => {\n onPageChange(event, 0)\n }\n\n const handlePreviousPage = (event: React.MouseEvent<HTMLButtonElement>) => {\n onPageChange(event, page - 1)\n }\n\n const handleNextPage = (event: React.MouseEvent<HTMLButtonElement>) => {\n onPageChange(event, page + 1)\n }\n\n const handleLastPage = (event: React.MouseEvent<HTMLButtonElement>) => {\n onPageChange(event, lastPage)\n }\n\n return (\n <Box sx={{ flexShrink: 0, ml: 2.5 }}>\n <IconButton\n onClick={handleFirstPage}\n disabled={page === 0}\n aria-label='first page'\n >\n <FirstPageIcon />\n </IconButton>\n <IconButton\n onClick={handlePreviousPage}\n disabled={page === 0}\n aria-label='previous page'\n >\n <KeyboardArrowLeft />\n </IconButton>\n <IconButton\n onClick={handleNextPage}\n disabled={page >= lastPage}\n aria-label='next page'\n >\n <KeyboardArrowRight />\n </IconButton>\n <IconButton\n onClick={handleLastPage}\n disabled={page >= lastPage}\n aria-label='last page'\n >\n <LastPageIcon />\n </IconButton>\n </Box>\n )\n}\n","import { TablePagination as MuiTablePagination } from '@mui/material'\nimport type { PaginationProps } from '../types'\nimport { PaginationActions } from './pagination-actions'\n\n/**\n * Table pagination component\n */\nexport function Pagination({\n page,\n rowsPerPage,\n total,\n rowsPerPageOptions = [5, 10, 25, 50],\n onPageChange,\n onRowsPerPageChange,\n}: PaginationProps) {\n const handlePageChange = (\n _event: React.MouseEvent<HTMLButtonElement> | null,\n newPage: number,\n ) => {\n onPageChange(newPage)\n }\n\n const handleRowsPerPageChange = (\n event: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>,\n ) => {\n onRowsPerPageChange(parseInt(event.target.value, 10))\n }\n\n return (\n <MuiTablePagination\n component='div'\n count={total}\n page={page}\n rowsPerPage={rowsPerPage}\n rowsPerPageOptions={rowsPerPageOptions}\n onPageChange={handlePageChange}\n onRowsPerPageChange={handleRowsPerPageChange}\n ActionsComponent={PaginationActions}\n />\n )\n}\n","import { useEffect, useRef } from 'react'\nimport { useWidgetStore } from '../widgets/stores/widget-store'\n\n/**\n * Custom hook for registering a DOM element ref with the widget store.\n * This allows other parts of the application to access the widget's DOM element.\n *\n * @param widgetId - The widget ID to register the ref under\n * @returns A ref object to attach to the DOM element\n *\n * @example\n * ```tsx\n * function MyWidget({ id }: { id: string }) {\n * const ref = useWidgetRef<HTMLDivElement>(id)\n *\n * return <div ref={ref}>Widget content</div>\n * }\n * ```\n */\nexport function useWidgetRef<T extends HTMLElement = HTMLElement>(\n widgetId: string,\n) {\n const ref = useRef<T | null>(null)\n const setWidget = useWidgetStore((store) => store.setWidget)\n\n useEffect(() => {\n if (ref.current) {\n setWidget(widgetId, { refUI: ref })\n }\n }, [widgetId, setWidget])\n\n return ref\n}\n","import {\n Table as MuiTable,\n TableBody,\n TableCell,\n TableHead,\n TableContainer as MuiTableContainer,\n Paper,\n type TableProps as MuiTableProps,\n} from '@mui/material'\nimport type { Ref } from 'react'\nimport { CellHeader } from './components/cell-header'\nimport { Row } from './components/row'\nimport { Pagination } from './components/pagination'\nimport { PaginationActions } from './components/pagination-actions'\nimport { useWidgetRef } from '../../hooks'\nimport type { TableUIProps } from './types'\n\n/**\n * Props for the base Table component\n */\nexport interface TableComponentProps extends MuiTableProps {\n /** Table element ref */\n ref?: Ref<HTMLTableElement>\n}\n\n/**\n * Base Table component with compound component pattern\n * Provides Table.Head, Table.Body, Table.Row, Table.Cell, Table.CellHeader, Table.Pagination\n */\nfunction Table({\n children,\n ref,\n stickyHeader = true,\n ...props\n}: TableComponentProps) {\n return (\n <MuiTable stickyHeader={stickyHeader} ref={ref} {...props}>\n {children}\n </MuiTable>\n )\n}\n\n// Attach sub-components as static properties\nTable.Head = TableHead\nTable.CellHeader = CellHeader\nTable.Body = TableBody\nTable.Row = Row\nTable.Cell = TableCell\nTable.Container = TableContainer\nTable.Paper = Paper\nTable.Pagination = Pagination\nTable.PaginationActions = PaginationActions\n\nexport { Table }\n\n/**\n * TableContainer widget component\n * Integrates with widget store and provides ref registration using custom hook\n */\nfunction TableContainer(props: TableUIProps) {\n const ref = useWidgetRef<HTMLDivElement>(props.id)\n\n return <MuiTableContainer ref={ref}>{props.children}</MuiTableContainer>\n}\n","import { downloadToCSV, downloadToPNG } from '../actions'\nimport type { ConfigProps } from '../root/types'\nimport type {\n TableDownloadConfig,\n TableWidgetConfig,\n TableColumn,\n Mode,\n SortDirection,\n} from './types'\n\nexport const DEFAULT_MODE: Mode = 'local'\nexport const DEFAULT_PAGE = 0\nexport const DEFAULT_ROWS_PER_PAGE = 10\nexport const DEFAULT_ROWS_PER_PAGE_OPTIONS = [5, 10, 25, 50]\n\nexport const DEFAULT_COLUMN_ID = null\nexport const DEFAULT_DIRECTION: SortDirection = 'asc'\n\n/**\n * Default table download configuration\n * Supports PNG export (screenshot) and CSV export (data)\n */\nexport function tableDownloadConfig({\n refUI,\n}: ConfigProps): TableDownloadConfig {\n return [\n {\n ...downloadToPNG,\n modifier: () => downloadToPNG.modifier(refUI),\n },\n {\n ...downloadToCSV,\n modifier: async (data) => {\n if (!data?.length) {\n return downloadToCSV.modifier([])\n }\n\n // Convert table data to CSV format\n // First row contains headers (column keys)\n const firstRow = data[0]\n if (!firstRow) {\n return downloadToCSV.modifier([])\n }\n\n const headers = Object.keys(firstRow).filter((key) => key !== 'id')\n const rows = data.map((row) =>\n headers.map((header) => {\n const value = row[header]\n if (value === null || value === undefined) return ''\n if (typeof value === 'object') return JSON.stringify(value)\n return value\n }),\n )\n\n return downloadToCSV.modifier([headers, ...rows])\n },\n },\n ]\n}\n\n/**\n * Default table widget configuration\n */\nexport function tableConfig(columns: TableColumn[] = []): TableWidgetConfig {\n return {\n columns,\n selectable: false,\n selected: new Set(),\n mode: DEFAULT_MODE,\n pagination: {\n page: DEFAULT_PAGE,\n rowsPerPageOptions: DEFAULT_ROWS_PER_PAGE_OPTIONS,\n rowsPerPage: DEFAULT_ROWS_PER_PAGE,\n total: 0,\n },\n sort: {\n columnId: DEFAULT_COLUMN_ID,\n direction: DEFAULT_DIRECTION,\n },\n }\n}\n","import { useCallback, useMemo } from 'react'\nimport type { TableRow, TableWidgetState } from '../types'\nimport { paginateData } from '../helpers'\nimport { useWidgetStore } from '../../stores/widget-store'\nimport { useShallow } from 'zustand/shallow'\nimport {\n DEFAULT_PAGE,\n DEFAULT_ROWS_PER_PAGE,\n DEFAULT_ROWS_PER_PAGE_OPTIONS,\n} from '../config'\n\nexport interface UsePaginationResult<T> {\n /** Whether pagination is enabled */\n paginationEnabled: boolean\n /** Current page (0-indexed) */\n page: number\n /** Rows per page */\n rowsPerPage: number\n /** Total row count */\n total: number\n /** Available rows per page options */\n rowsPerPageOptions: number[]\n /** Paginated data (for local mode) */\n paginatedData: T[]\n /** Set current page */\n setPage: (page: number) => void\n /** Set rows per page */\n setRowsPerPage: (rowsPerPage: number) => void\n /** Go to first page */\n goToFirstPage: () => void\n /** Go to last page */\n goToLastPage: () => void\n /** Go to next page */\n goToNextPage: () => void\n /** Go to previous page */\n goToPreviousPage: () => void\n}\n\n/**\n * Hook for managing table pagination\n * Supports both local (client-side) and remote (server-side) pagination\n * State is persisted in the widget store for the given widgetId\n */\nexport function usePagination<T extends TableRow>(\n widgetId: string,\n data: T[],\n): UsePaginationResult<T> {\n // Get store actions and state\n const setWidget = useWidgetStore((state) => state.setWidget)\n const paginationState = useWidgetStore(\n useShallow((state) => {\n const widget = state.widgets[widgetId] as TableWidgetState | undefined\n return {\n paginationEnabled: !!widget?.pagination,\n page: widget?.pagination?.page ?? DEFAULT_PAGE,\n rowsPerPage: widget?.pagination?.rowsPerPage ?? DEFAULT_ROWS_PER_PAGE,\n rowsPerPageOptions:\n widget?.pagination?.rowsPerPageOptions ??\n DEFAULT_ROWS_PER_PAGE_OPTIONS,\n total: widget?.pagination?.total ?? data.length,\n }\n }),\n )\n\n const mode = useWidgetStore(\n useShallow((state) => {\n const widget = state.widgets[widgetId] as TableWidgetState | undefined\n return widget?.mode\n }),\n )\n\n // Calculate max page\n const maxPage = Math.max(\n 0,\n Math.ceil(paginationState.total / (paginationState?.rowsPerPage ?? 1)) - 1,\n )\n\n // Set page with bounds checking\n const setPage = useCallback(\n (newPage: number) => {\n const boundedPage = Math.max(0, Math.min(newPage, maxPage))\n\n setWidget<TableWidgetState>(widgetId, {\n pagination: {\n ...paginationState,\n page: boundedPage,\n },\n })\n },\n [maxPage, paginationState, setWidget, widgetId],\n )\n\n // Set rows per page and reset to first page\n const setRowsPerPage = useCallback(\n (newRowsPerPage: number) => {\n setWidget<TableWidgetState>(widgetId, {\n pagination: {\n ...paginationState,\n rowsPerPage: newRowsPerPage,\n },\n })\n },\n [paginationState, setWidget, widgetId],\n )\n\n // Navigation helpers\n const goToFirstPage = useCallback(() => setPage(0), [setPage])\n const goToLastPage = useCallback(() => setPage(maxPage), [setPage, maxPage])\n const goToNextPage = useCallback(\n () => setPage(paginationState.page + 1),\n [setPage, paginationState.page],\n )\n const goToPreviousPage = useCallback(\n () => setPage(paginationState.page - 1),\n [setPage, paginationState.page],\n )\n\n // Paginated data for local mode\n const paginatedData = useMemo(() => {\n if (mode === 'remote' || !paginationState.paginationEnabled) {\n // For remote mode, data is already paginated from server\n return data\n }\n return paginateData(data, paginationState.page, paginationState.rowsPerPage)\n }, [\n data,\n mode,\n paginationState.page,\n paginationState.paginationEnabled,\n paginationState.rowsPerPage,\n ])\n\n return {\n ...paginationState,\n paginatedData,\n setPage,\n setRowsPerPage,\n goToFirstPage,\n goToLastPage,\n goToNextPage,\n goToPreviousPage,\n }\n}\n","import { useCallback, useMemo } from 'react'\nimport type {\n TableRow,\n SortDirection,\n SortState,\n TableWidgetState,\n} from '../types'\nimport { sortData } from '../helpers'\nimport { useWidgetStore } from '../../stores/widget-store'\nimport { useShallow } from 'zustand/shallow'\nimport { DEFAULT_COLUMN_ID, DEFAULT_DIRECTION } from '../config'\n\nexport interface UseSortOptions {\n /** Callback when sort changes (for remote sorting) */\n onSortChange?: (columnId: string, direction: SortDirection) => void\n}\n\nexport interface UseSortResult<T> extends SortState {\n /** Whether sorting is enabled */\n sortEnabled: boolean\n /** Current sort state */\n columnId: string | null\n direction: SortDirection\n /** Sorted data (for local mode) */\n sortedData: T[]\n /** Toggle sort on a column */\n toggleSort: (columnId: string) => void\n /** Set sort state directly */\n setSort: (columnId: string | null, direction: SortDirection) => void\n /** Clear sort */\n clearSort: () => void\n}\n\n/**\n * Hook for managing table sorting\n * Supports both local (client-side) and remote (server-side) sorting\n * State is persisted in the widget store for the given widgetId\n */\nexport function useSort<T extends TableRow>(\n widgetId: string,\n data: T[],\n options?: UseSortOptions,\n): UseSortResult<T> {\n const { onSortChange } = options ?? {}\n\n // Get store actions and state\n const setWidget = useWidgetStore((state) => state.setWidget)\n const getWidget = useWidgetStore((state) => state.getWidget)\n const sortStoreState = useWidgetStore(\n useShallow((state) => {\n const widget = state.widgets[widgetId] as TableWidgetState | undefined\n return {\n sortEnabled: !!widget?.sort,\n columnId: widget?.sort?.columnId ?? DEFAULT_COLUMN_ID,\n direction: widget?.sort?.direction ?? DEFAULT_DIRECTION,\n }\n }),\n )\n\n const mode = useWidgetStore(\n useShallow((state) => {\n const widget = state.widgets[widgetId] as TableWidgetState | undefined\n return widget?.mode\n }),\n )\n\n // Toggle sort on a column\n const toggleSort = useCallback(\n (toggleColumnId: string) => {\n let newDirection: SortDirection = 'asc'\n\n if (sortStoreState.columnId === toggleColumnId) {\n // Same column - toggle direction\n newDirection = sortStoreState.direction === 'asc' ? 'desc' : 'asc'\n }\n\n setWidget<TableWidgetState>(widgetId, {\n sort: {\n ...sortStoreState,\n columnId: toggleColumnId,\n direction: newDirection,\n },\n })\n\n if (mode === 'remote' && onSortChange) {\n onSortChange(toggleColumnId, newDirection)\n }\n },\n [mode, onSortChange, setWidget, sortStoreState, widgetId],\n )\n\n // Set sort state directly\n const setSort = useCallback(\n (newColumnId: string | null, newDirection: SortDirection) => {\n setWidget<TableWidgetState>(widgetId, {\n sort: {\n ...sortStoreState,\n columnId: newColumnId,\n direction: newDirection,\n },\n })\n\n if (mode === 'remote' && onSortChange && newColumnId) {\n onSortChange(newColumnId, newDirection)\n }\n },\n [mode, onSortChange, setWidget, sortStoreState, widgetId],\n )\n\n // Clear sort\n const clearSort = useCallback(() => {\n const widget = getWidget<TableWidgetState>(widgetId)\n if (!widget?.sort) return\n\n setWidget<TableWidgetState>(widgetId, {\n sort: {\n ...widget.sort,\n columnId: null,\n direction: 'asc',\n },\n })\n }, [setWidget, getWidget, widgetId])\n\n // Sorted data for local mode\n const sortedData = useMemo(() => {\n if (\n mode === 'remote' ||\n !sortStoreState.columnId ||\n !sortStoreState.sortEnabled\n ) {\n // For remote mode, data is already sorted from server\n // If no sort column, return original data\n return data\n }\n return sortData(data, sortStoreState.columnId, sortStoreState.direction)\n }, [\n data,\n mode,\n sortStoreState.columnId,\n sortStoreState.direction,\n sortStoreState.sortEnabled,\n ])\n\n return {\n ...sortStoreState,\n sortedData,\n toggleSort,\n setSort,\n clearSort,\n }\n}\n","import { useCallback, useMemo } from 'react'\nimport type { TableRow, TableWidgetState } from '../types'\nimport { useWidgetStore } from '../../stores/widget-store'\nimport { useShallow } from 'zustand/shallow'\n\nexport interface UseSelectionOptions {\n /** Callback when selection changes */\n onSelectionChange?: (selectedIds: Set<string | number>) => void\n}\n\nexport interface UseSelectionResult {\n /** Set of selected row IDs */\n selectedIds: Set<string | number>\n /** Check if a row is selected */\n isSelected: (id: string | number) => boolean\n /** Check if all provided rows are selected */\n isAllSelected: (rows: TableRow[]) => boolean\n /** Check if some but not all rows are selected (for indeterminate state) */\n isIndeterminate: (rows: TableRow[]) => boolean\n /** Toggle selection of a single row */\n toggleRow: (id: string | number) => void\n /** Toggle selection of all provided rows */\n toggleAll: (rows: TableRow[]) => void\n /** Select specific rows */\n selectRows: (ids: (string | number)[]) => void\n /** Deselect specific rows */\n deselectRows: (ids: (string | number)[]) => void\n /** Clear all selections */\n clearSelection: () => void\n}\n\n/**\n * Hook for managing table row selection\n * Selection persists across pagination and is stored in the widget store\n */\nexport function useSelection(\n widgetId: string,\n options?: UseSelectionOptions,\n): UseSelectionResult {\n const { onSelectionChange } = options ?? {}\n\n // Get store actions and state\n const setWidget = useWidgetStore((state) => state.setWidget)\n const getWidget = useWidgetStore((state) => state.getWidget)\n const selected = useWidgetStore(\n useShallow((state) => {\n const widget = state.widgets[widgetId] as TableWidgetState | undefined\n return widget?.selected\n }),\n )\n\n // Use store values with fallback to empty Set\n const selectedIds = useMemo(\n () => selected ?? new Set<string | number>(),\n [selected],\n )\n\n // Check if a row is selected\n const isSelected = useCallback(\n (id: string | number) => selectedIds.has(id),\n [selectedIds],\n )\n\n // Check if all provided rows are selected\n const isAllSelected = useCallback(\n (rows: TableRow[]) => {\n if (rows.length === 0) return false\n return rows.every((row) => selectedIds.has(row.id))\n },\n [selectedIds],\n )\n\n // Check if some but not all rows are selected\n const isIndeterminate = useCallback(\n (rows: TableRow[]) => {\n if (rows.length === 0) return false\n const selectedCount = rows.filter((row) => selectedIds.has(row.id)).length\n return selectedCount > 0 && selectedCount < rows.length\n },\n [selectedIds],\n )\n\n // Toggle selection of a single row\n const toggleRow = useCallback(\n (id: string | number) => {\n const widget = getWidget<TableWidgetState>(widgetId)\n const currentSelected = widget?.selected ?? new Set<string | number>()\n\n const newSet = new Set(currentSelected)\n if (newSet.has(id)) {\n newSet.delete(id)\n } else {\n newSet.add(id)\n }\n\n setWidget<TableWidgetState>(widgetId, {\n selected: newSet,\n })\n\n if (onSelectionChange) {\n onSelectionChange(newSet)\n }\n },\n [getWidget, setWidget, widgetId, onSelectionChange],\n )\n\n // Toggle selection of all provided rows\n const toggleAll = useCallback(\n (rows: TableRow[]) => {\n const widget = getWidget<TableWidgetState>(widgetId)\n const currentSelected = widget?.selected ?? new Set<string | number>()\n\n const allSelected = rows.every((row) => currentSelected.has(row.id))\n const newSet = new Set(currentSelected)\n\n if (allSelected) {\n // Deselect all provided rows\n rows.forEach((row) => newSet.delete(row.id))\n } else {\n // Select all provided rows\n rows.forEach((row) => newSet.add(row.id))\n }\n\n setWidget<TableWidgetState>(widgetId, {\n selected: newSet,\n })\n\n if (onSelectionChange) {\n onSelectionChange(newSet)\n }\n },\n [getWidget, setWidget, widgetId, onSelectionChange],\n )\n\n // Select specific rows\n const selectRows = useCallback(\n (ids: (string | number)[]) => {\n const widget = getWidget<TableWidgetState>(widgetId)\n const currentSelected = widget?.selected ?? new Set<string | number>()\n\n const newSet = new Set(currentSelected)\n ids.forEach((id) => newSet.add(id))\n\n setWidget<TableWidgetState>(widgetId, {\n selected: newSet,\n })\n\n if (onSelectionChange) {\n onSelectionChange(newSet)\n }\n },\n [getWidget, setWidget, widgetId, onSelectionChange],\n )\n\n // Deselect specific rows\n const deselectRows = useCallback(\n (ids: (string | number)[]) => {\n const widget = getWidget<TableWidgetState>(widgetId)\n const currentSelected = widget?.selected ?? new Set<string | number>()\n\n const newSet = new Set(currentSelected)\n ids.forEach((id) => newSet.delete(id))\n\n setWidget<TableWidgetState>(widgetId, {\n selected: newSet,\n })\n\n if (onSelectionChange) {\n onSelectionChange(newSet)\n }\n },\n [getWidget, setWidget, widgetId, onSelectionChange],\n )\n\n // Clear all selections\n const clearSelection = useCallback(() => {\n const newSet = new Set<string | number>()\n\n setWidget<TableWidgetState>(widgetId, {\n selected: newSet,\n })\n\n if (onSelectionChange) {\n onSelectionChange(newSet)\n }\n }, [setWidget, widgetId, onSelectionChange])\n\n return {\n selectedIds,\n isSelected,\n isAllSelected,\n isIndeterminate,\n toggleRow,\n toggleAll,\n selectRows,\n deselectRows,\n clearSelection,\n }\n}\n","import {\n Box,\n Skeleton,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableRow,\n} from '@mui/material'\n\nexport interface TableSkeletonProps {\n /** Number of columns to display */\n columns?: number\n /** Number of rows to display */\n rows?: number\n}\n\n/**\n * Table skeleton loader component\n */\nexport function TableSkeleton({ columns = 4, rows = 5 }: TableSkeletonProps) {\n return (\n <Box aria-label='Table skeleton'>\n <Table>\n <TableHead>\n <TableRow>\n {Array.from({ length: columns }).map((_, index) => (\n <TableCell key={index}>\n <Skeleton width='80%' height={24} />\n </TableCell>\n ))}\n </TableRow>\n </TableHead>\n <TableBody>\n {Array.from({ length: rows }).map((_, rowIndex) => (\n <TableRow key={rowIndex}>\n {Array.from({ length: columns }).map((_, colIndex) => (\n <TableCell key={colIndex}>\n <Skeleton width='70%' height={20} />\n </TableCell>\n ))}\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </Box>\n )\n}\n","import type { TableRow, TableWidgetData } from './types'\n\n/**\n * Sanitizes a table row by ensuring all values are serializable.\n * Converts ReactNode and function values to undefined.\n *\n * @param row - The table row to sanitize\n * @returns A sanitized table row\n */\nexport function sanitizeTableRow(row: TableRow): TableRow {\n const sanitized: TableRow = { id: row.id }\n\n for (const [key, value] of Object.entries(row)) {\n if (key === 'id') continue\n\n // Keep primitive values\n if (\n typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'boolean' ||\n value === null\n ) {\n sanitized[key] = value\n }\n // Serialize arrays and plain objects\n else if (Array.isArray(value) || typeof value === 'object') {\n try {\n // Attempt to serialize - if it fails, the value contains non-serializable content\n JSON.stringify(value)\n sanitized[key] = value\n } catch {\n sanitized[key] = undefined\n }\n }\n // Skip functions and other non-serializable values\n else {\n sanitized[key] = undefined\n }\n }\n\n return sanitized\n}\n\n/**\n * Sanitizes table widget data by ensuring all rows are serializable.\n *\n * @param data - The table data to sanitize\n * @returns Sanitized table data\n */\nexport function sanitizeTableData(\n data: TableWidgetData | undefined,\n): TableWidgetData | undefined {\n return data?.map(sanitizeTableRow)\n}\n","import type { SxProps, Theme } from '@mui/material'\n\nexport const styles = {\n container: {\n width: '100%',\n overflow: 'auto',\n },\n table: {\n minWidth: 650,\n },\n headerCell: {\n fontWeight: 600,\n backgroundColor: (theme: Theme) => theme.palette.background.paper,\n },\n row: {\n '&:last-child td, &:last-child th': {\n border: 0,\n },\n },\n rowHover: {\n '&:hover': {\n backgroundColor: (theme: Theme) => theme.palette.action.hover,\n },\n },\n rowSelected: {\n backgroundColor: (theme: Theme) => theme.palette.action.selected,\n '&:hover': {\n backgroundColor: (theme: Theme) => theme.palette.action.selected,\n },\n },\n pagination: {\n borderTop: (theme: Theme) => `1px solid ${theme.palette.divider}`,\n },\n} satisfies Record<string, SxProps<Theme>>\n"],"names":["CellHeader","t0","$","_c","column","sortState","onSort","isSelectAll","isAllSelected","isIndeterminate","onSelectAll","t1","Symbol","for","t2","jsx","TableCell","Checkbox","isSorted","columnId","id","sortDirection","direction","undefined","sortable","width","t3","t4","label","TableSortLabel","t5","align","getCellValue","cellValue","Array","isArray","map","item","String","join","JSON","stringify","compareValues","a","b","comparison","localeCompare","strA","strB","sortData","data","sort","paginateData","page","rowsPerPage","start","end","slice","DEFAULT_P","children","Typography","CELL_MARKDOWN_COMPONENTS","h1","h2","h3","p","href","isExternal","startsWith","Link","img","ul","ol","li","Cell","value","formatter","MuiTableCell","ReactMarkdown","Row","row","columns","isSelected","selectable","onClick","onSelect","onMouseEnter","onMouseLeave","handleClick","event","stopPropagation","handleCheckboxClick","handleMouseEnter","t6","handleMouseLeave","t7","t8","t9","cursor","t10","t11","t12","MuiTableRow","PaginationActions","count","onPageChange","lastPage","Math","max","ceil","handleFirstPage","event_0","handlePreviousPage","event_1","handleNextPage","event_2","handleLastPage","flexShrink","ml","FirstPageIcon","IconButton","KeyboardArrowLeft","t13","KeyboardArrowRight","t14","t15","t16","LastPageIcon","t17","t18","jsxs","Box","Pagination","total","rowsPerPageOptions","onRowsPerPageChange","_event","newPage","handlePageChange","parseInt","target","handleRowsPerPageChange","MuiTablePagination","useWidgetRef","widgetId","ref","useRef","setWidget","useWidgetStore","_temp","current","refUI","useEffect","store","Table","props","stickyHeader","MuiTable","Head","TableHead","Body","TableBody","Container","TableContainer","Paper","MuiTableContainer","DEFAULT_MODE","DEFAULT_PAGE","DEFAULT_ROWS_PER_PAGE","DEFAULT_ROWS_PER_PAGE_OPTIONS","DEFAULT_COLUMN_ID","DEFAULT_DIRECTION","tableDownloadConfig","downloadToPNG","modifier","downloadToCSV","length","firstRow","headers","Object","keys","filter","key","rows","header","tableConfig","selected","Set","mode","pagination","usePagination","state_0","widget","state","widgets","paginationEnabled","paginationState","useShallow","state_1","maxPage","boundedPage","min","setPage","newRowsPerPage","setRowsPerPage","goToFirstPage","goToLastPage","goToNextPage","goToPreviousPage","bb0","paginatedData","useSort","options","onSortChange","getWidget","_temp2","sortEnabled","sortStoreState","state_2","toggleColumnId","newDirection","toggleSort","newColumnId","newDirection_0","setSort","widget_1","clearSort","sortedData","useSelection","onSelectionChange","selectedIds","has","every","rows_0","selectedCount","row_0","id_0","currentSelected","newSet","delete","add","toggleRow","rows_1","currentSelected_0","allSelected","row_1","newSet_0","forEach","row_2","row_3","toggleAll","ids","currentSelected_1","newSet_1","id_1","selectRows","ids_0","currentSelected_2","newSet_2","id_2","deselectRows","newSet_3","clearSelection","TableSkeleton","TableRow","from","__0","rowIndex","__1","colIndex","Skeleton","_","index","sanitizeTableRow","sanitized","entries","sanitizeTableData","styles","container","overflow","table","minWidth","headerCell","fontWeight","backgroundColor","theme","palette","background","paper","border","rowHover","action","hover","rowSelected","borderTop","divider"],"mappings":";;;;;;;;;;;;;;;;;;AAMO,SAAAA,GAAAC,GAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GAAoB;AAAA,IAAAC,QAAAA;AAAAA,IAAAC,WAAAA;AAAAA,IAAAC,QAAAA;AAAAA,IAAAC,aAAAA;AAAAA,IAAAC,eAAAA;AAAAA,IAAAC,iBAAAA;AAAAA,IAAAC,aAAAA;AAAAA,EAAAA,IAAAT;AAUzB,MAAIM,GAAW;AAAA,QAAAI;AAAA,IAAAT,EAAA,CAAA,MAAAU,OAAAC,IAAA,2BAAA,KAOKF,IAAA;AAAA,MAAA,cAAgB;AAAA,IAAA,GAAmBT,OAAAS,KAAAA,IAAAT,EAAA,CAAA;AAAA,QAAAY;AAAA,WAAAZ,EAAA,CAAA,MAAAM,KAAAN,SAAAO,KAAAP,EAAA,CAAA,MAAAQ,KALnDI,IAAA,gBAAAC,EAACC,GAAA,EAAkB,SAAA,YACjB,UAAA,gBAAAD,EAACE,GAAA,EACUT,SAAAA,GACMC,eAAAA,GACLC,aACE,YAAAC,GAAmC,GAEnD,GAAYT,OAAAM,GAAAN,OAAAO,GAAAP,OAAAQ,GAAAR,OAAAY,KAAAA,IAAAZ,EAAA,CAAA,GAPZY;AAAAA,EAOY;AAIhB,QAAAI,IAAiBb,GAASc,aAAef,EAAMgB,IAC/CC,IAAsBH,IAAWb,EAASiB,YAApBC;AAGtB,MAAInB,EAAMoB,YAANlB,GAAyB;AAAA,QAAAK;AAAA,IAAAT,EAAA,CAAA,MAAAE,EAAAqB,SAIhBd,IAAA;AAAA,MAAAc,OAASrB,EAAMqB;AAAAA,IAAAA,GAAQvB,EAAA,CAAA,IAAAE,EAAAqB,OAAAvB,OAAAS,KAAAA,IAAAT,EAAA,CAAA;AAKjB,UAAAY,IAAAO,KAAA;AAAsB,QAAAK;AAAA,IAAAxB,SAAAE,EAAAgB,MAAAlB,SAAAI,KACxBoB,IAAAA,MAAMpB,EAAOF,EAAMgB,EAAG,GAAClB,EAAA,CAAA,IAAAE,EAAAgB,IAAAlB,OAAAI,GAAAJ,OAAAwB,KAAAA,IAAAxB,EAAA,CAAA;AAAA,QAAAyB;AAAA,IAAAzB,EAAA,EAAA,MAAAE,EAAAwB,SAAA1B,EAAA,EAAA,MAAAgB,KAAAhB,EAAA,EAAA,MAAAY,KAAAZ,UAAAwB,KAHlCC,IAAA,gBAAAZ,EAACc,MACSX,QAAAA,GACG,WAAAJ,GACF,SAAAY,GAERtB,UAAAA,EAAMwB,MAAAA,CACT,GAAiB1B,EAAA,EAAA,IAAAE,EAAAwB,OAAA1B,QAAAgB,GAAAhB,QAAAY,GAAAZ,QAAAwB,GAAAxB,QAAAyB,KAAAA,IAAAzB,EAAA,EAAA;AAAA,QAAA4B;AAAA,WAAA5B,EAAA,EAAA,MAAAE,EAAA2B,SAAA7B,EAAA,EAAA,MAAAmB,KAAAnB,EAAA,EAAA,MAAAS,KAAAT,UAAAyB,KAXnBG,IAAA,gBAAAf,EAACC,KACQ,OAAAZ,EAAM2B,OACN,OAAApB,GACQU,eAAAA,GAEfM,UAAAA,EAAAA,CAOF,GAAYzB,EAAA,EAAA,IAAAE,EAAA2B,OAAA7B,QAAAmB,GAAAnB,QAAAS,GAAAT,QAAAyB,GAAAzB,QAAA4B,KAAAA,IAAA5B,EAAA,EAAA,GAZZ4B;AAAAA,EAYY;AAEf,MAAAnB;AAAA,EAAAT,EAAA,EAAA,MAAAE,EAAAqB,SAIwCd,IAAA;AAAA,IAAAc,OAASrB,EAAMqB;AAAAA,EAAAA,GAAQvB,EAAA,EAAA,IAAAE,EAAAqB,OAAAvB,QAAAS,KAAAA,IAAAT,EAAA,EAAA;AAAA,MAAAY;AAAA,SAAAZ,EAAA,EAAA,MAAAE,EAAA2B,SAAA7B,EAAA,EAAA,MAAAE,EAAAwB,SAAA1B,UAAAS,KAA9DG,IAAA,gBAAAC,EAACC,KAAiB,OAAAZ,EAAM2B,OAAe,OAAApB,GACpCP,YAAMwB,MAAAA,CACT,GAAY1B,EAAA,EAAA,IAAAE,EAAA2B,OAAA7B,EAAA,EAAA,IAAAE,EAAAwB,OAAA1B,QAAAS,GAAAT,QAAAY,KAAAA,IAAAZ,EAAA,EAAA,GAFZY;AAEY;AC7CT,SAASkB,GAAgBC,GAAyB;AAEvD,SAAIA,KAAc,OACT,KAILC,MAAMC,QAAQF,CAAS,IAIlB,IAHWA,EACfG,IAAKC,CAAAA,MAAU,OAAOA,KAAS,WAAW,IAAIA,CAAI,MAAMC,OAAOD,CAAI,CAAE,EACrEE,KAAK,IAAI,CACQ,MAIlB,OAAON,KAAc,WAChBO,KAAKC,UAAUR,CAAS,IAI1BA;AACT;AAWO,SAASS,GACdC,GACAC,GACAtB,GACQ;AAER,MAAIqB,KAAM,KAAyB,QAAO;AAC1C,MAAIC,KAAM,KAAyB,QAAO;AAE1C,MAAIC,IAAa;AAEjB,MAAI,OAAOF,KAAM,YAAY,OAAOC,KAAM;AACxCC,IAAAA,IAAaF,EAAEG,cAAcF,CAAC;AAAA,WACrB,OAAOD,KAAM,YAAY,OAAOC,KAAM;AAC/CC,IAAAA,IAAaF,IAAIC;AAAAA,WACR,OAAOD,KAAM,aAAa,OAAOC,KAAM;AAChDC,IAAAA,IAAaF,MAAMC,IAAI,IAAID,IAAI,IAAI;AAAA,WAC1B,OAAOA,KAAM,YAAY,OAAOC,KAAM,UAAU;AAEzD,UAAMG,IAAOP,KAAKC,UAAUE,CAAC,GACvBK,IAAOR,KAAKC,UAAUG,CAAC;AAC7BC,IAAAA,IAAaE,EAAKD,cAAcE,CAAI;AAAA,EACtC;AAEEH,IAAAA,IAAa;AAGf,SAAOvB,MAAc,QAAQuB,IAAa,CAACA;AAC7C;AAUO,SAASI,GACdC,GACA/B,GACAG,GACK;AACL,SAAO,CAAC,GAAG4B,CAAI,EAAEC,KAAK,CAACR,GAAGC,MACxBF,GAAcC,EAAExB,CAAQ,GAAGyB,EAAEzB,CAAQ,GAAGG,CAAS,CACnD;AACF;AAUO,SAAS8B,GACdF,GACAG,GACAC,GACK;AACL,QAAMC,IAAQF,IAAOC,GACfE,IAAMD,IAAQD;AACpB,SAAOJ,EAAKO,MAAMF,GAAOC,CAAG;AAC9B;AC1FA,MAAME,IAAYzD,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA,GAAC;AAAA,IAAAwD,UAAAA;AAAAA,EAAAA,IAAA1D;AAAsC,MAAAU;AAAA,SAAAT,SAAAyD,KACvDhD,sBAACiD,MAAqB,WAAA,QAAe,SAAA,SAAc,OAAA,wBAEnD,GAAa1D,OAAAyD,GAAAzD,OAAAS,KAAAA,IAAAT,EAAA,CAAA,GAFbS;AAEa,GAOTkD,KAAuC;AAAA,EAC3CC,IAAIJ;AAAAA,EACJK,IAAIL;AAAAA,EACJM,IAAIN;AAAAA,EACJO,GAAGP;AAAAA,EACHf,GAAGA,CAAC;AAAA,IAAEgB,UAAAA;AAAAA,IAAUO,MAAAA;AAAAA,EAAAA,MAAW;AACzB,UAAMC,IAAaD,GAAME,WAAW,MAAM;AAC1C,WACE,gBAAArD,EAACsD,IAAA,EACC,MAAAH,GACA,QAAQC,IAAa,WAAW5C,QAChC,KAAK4C,IAAa,wBAAwB5C,QAC1C,OAAM,gBACN,WAAU,UAEToC,UAAAA,GACH;AAAA,EAEJ;AAAA,EACAW,KAAKA,MAAM;AAAA,EACXC,IAAIb;AAAAA,EACJc,IAAId;AAAAA,EACJe,IAAIf;AACN;AAOO,SAAAgB,GAAAzE,GAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GAAc;AAAA,IAAAC,QAAAA;AAAAA,IAAAuE,OAAAA;AAAAA,EAAAA,IAAA1E;AAEnB,MAAIG,EAAMwE,WAAU;AAEK,UAAAjE,IAAAP,EAAM2B;AAAM,QAAAjB;AAAA,IAAAZ,EAAA,CAAA,MAAAE,KAAAF,SAAAyE,KAC9B7D,IAAAV,EAAMwE,UAAWD,CAAK,GAACzE,OAAAE,GAAAF,OAAAyE,GAAAzE,OAAAY,KAAAA,IAAAZ,EAAA,CAAA;AAAA,QAAAwB;AAAA,WAAAxB,SAAAE,EAAA2B,SAAA7B,SAAAY,KAD1BY,IAAA,gBAAAX,EAAC8D,GAAA,EAAoB,OAAAlE,GAClBG,UAAAA,GACH,GAAeZ,EAAA,CAAA,IAAAE,EAAA2B,OAAA7B,OAAAY,GAAAZ,OAAAwB,KAAAA,IAAAxB,EAAA,CAAA,GAFfwB;AAAAA,EAEe;AAKnB,MAAI,OAAOiD,KAAU,UAAQ;AAAA,QAAAhE;AAAA,IAAAT,SAAAyE,KAGvBhE,IAAA,gBAAAI,EAAC+D,IAAA,EAA0BjB,YAAAA,IACxBc,UAAAA,GACH,GAAgBzE,OAAAyE,GAAAzE,OAAAS,KAAAA,IAAAT,EAAA,CAAA;AAAA,QAAAY;AAAA,WAAAZ,SAAAE,EAAA2B,SAAA7B,SAAAS,KAHlBG,sBAAC+D,GAAA,EAAoB,OAAAzE,EAAM2B,OACzBpB,UAAAA,GAGF,GAAeT,EAAA,CAAA,IAAAE,EAAA2B,OAAA7B,OAAAS,GAAAT,QAAAY,KAAAA,IAAAZ,EAAA,EAAA,GAJfY;AAAAA,EAIe;AAKS,QAAAH,IAAAP,EAAM2B;AAAM,MAAAjB;AAAA,EAAAZ,UAAAyE,KAAG7D,IAAAkB,GAAa2C,CAAK,GAACzE,QAAAyE,GAAAzE,QAAAY,KAAAA,IAAAZ,EAAA,EAAA;AAAA,MAAAwB;AAAA,SAAAxB,UAAAE,EAAA2B,SAAA7B,UAAAY,KAAvDY,IAAA,gBAAAX,EAAC8D,GAAA,EAAoB,OAAAlE,GAAeG,UAAAA,GAAoB,GAAeZ,EAAA,EAAA,IAAAE,EAAA2B,OAAA7B,QAAAY,GAAAZ,QAAAwB,KAAAA,IAAAxB,EAAA,EAAA,GAAvEwB;AAAuE;ACvEzE,SAAAqD,GAAA9E,GAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GAAa;AAAA,IAAA6E,KAAAA;AAAAA,IAAAC,SAAAA;AAAAA,IAAAC,YAAAvE;AAAAA,IAAAwE,YAAArE;AAAAA,IAAAsE,SAAAA;AAAAA,IAAAC,UAAAA;AAAAA,IAAAC,cAAAA;AAAAA,IAAAC,cAAAA;AAAAA,EAAAA,IAAAtF,GAGlBiF,IAAAvE,MAAAY,SAAA,KAAAZ,GACAwE,IAAArE,MAAAS,SAAA,KAAAT;AAAkB,MAAAY;AAAA,EAAAxB,EAAA,CAAA,MAAAkF,KAAAlF,SAAA8E,KAMEtD,IAAAA,MAAA;AAClB0D,IAAAA,IAAUJ,CAAG;AAAA,EAAC,GACf9E,OAAAkF,GAAAlF,OAAA8E,GAAA9E,OAAAwB,KAAAA,IAAAxB,EAAA,CAAA;AAFD,QAAAsF,IAAoB9D;AAEnB,MAAAC;AAAA,EAAAzB,EAAA,CAAA,MAAAmF,KAAAnF,SAAA8E,KAE2BrD,IAAA8D,CAAAA,MAAA;AAC1BA,IAAAA,EAAKC,gBAAAA,GACLL,IAAWL,CAAG;AAAA,EAAC,GAChB9E,OAAAmF,GAAAnF,OAAA8E,GAAA9E,OAAAyB,KAAAA,IAAAzB,EAAA,CAAA;AAHD,QAAAyF,IAA4BhE;AAG3B,MAAAG;AAAA,EAAA5B,EAAA,CAAA,MAAAoF,KAAApF,SAAA8E,KAEwBlD,IAAAA,MAAA;AACvBwD,IAAAA,IAAeN,CAAG;AAAA,EAAC,GACpB9E,OAAAoF,GAAApF,OAAA8E,GAAA9E,OAAA4B,KAAAA,IAAA5B,EAAA,CAAA;AAFD,QAAA0F,IAAyB9D;AAExB,MAAA+D;AAAA,EAAA3F,SAAAqF,KAEwBM,IAAAA,MAAA;AACvBN,IAAAA,IAAAA;AAAAA,EAAgB,GACjBrF,OAAAqF,GAAArF,QAAA2F,KAAAA,IAAA3F,EAAA,EAAA;AAFD,QAAA4F,IAAyBD,GAMdE,IAAA,CAAC,CAACT,KAAF,CAAmB,CAACC,KAApB,CAAqC,CAACH,GAMnCY,IAAAZ,IAAA,YAAA;AAA+B,MAAAa;AAAA,EAAA/F,UAAA8F,KADrCC,IAAA;AAAA,IAAAC,QACMF;AAAAA,EAAAA,GACT9F,QAAA8F,GAAA9F,QAAA+F,KAAAA,IAAA/F,EAAA,EAAA;AAAA,MAAAiG;AAAA,EAAAjG,EAAA,EAAA,MAAAyF,KAAAzF,EAAA,EAAA,MAAAgF,KAAAhF,EAAA,EAAA,MAAA8E,KAAA9E,UAAAiF,KAEAgB,IAAAhB,KACC,gBAAApE,EAACC,GAAA,EAAkB,SAAA,YACjB,UAAA,gBAAAD,EAACE,GAAA,EACUiE,SAAAA,GACAS,SAAAA,GACG,YAAA;AAAA,IAAA,cAAgB,cAAcX,EAAG5D,EAAG;AAAA,EAAA,GAAI,EAAA,CAExD,GACDlB,QAAAyF,GAAAzF,QAAAgF,GAAAhF,QAAA8E,GAAA9E,QAAAiF,GAAAjF,QAAAiG,KAAAA,IAAAjG,EAAA,EAAA;AAAA,MAAAkG;AAAA,MAAAlG,EAAA,EAAA,MAAA+E,KAAA/E,UAAA8E,GAAA;AAAA,QAAAqB;AAAA,IAAAnG,UAAA8E,KACYqB,IAAAjG,CAAAA,MACX,gBAAAW,EAAC2D,IAAA,EAA6BtE,QAAAA,GAAe,OAAA4E,EAAI5E,EAAMgB,EAAG,EAAA,GAA/ChB,EAAMgB,EAA0C,GAC5DlB,QAAA8E,GAAA9E,QAAAmG,KAAAA,IAAAnG,EAAA,EAAA,GAFAkG,IAAAnB,EAAO7C,IAAKiE,CAEZ,GAACnG,QAAA+E,GAAA/E,QAAA8E,GAAA9E,QAAAkG;AAAAA,EAAA;AAAAA,IAAAA,IAAAlG,EAAA,EAAA;AAAA,MAAAmG;AAAA,SAAAnG,EAAA,EAAA,MAAAsF,KAAAtF,EAAA,EAAA,MAAA0F,KAAA1F,EAAA,EAAA,MAAA4F,KAAA5F,EAAA,EAAA,MAAAgF,KAAAhF,EAAA,EAAA,MAAAiG,KAAAjG,EAAA,EAAA,MAAAkG,KAAAlG,EAAA,EAAA,MAAA6F,KAAA7F,UAAA+F,KArBJI,sBAACC,GAAA,EACQ,OAAAP,GACGb,UAAAA,GACDM,SAAAA,GACKI,iBACAE,cAAAA,GACV,IAAAG,GAIHE,UAAAA;AAAAA,IAAAA;AAAAA,IASAC;AAAAA,EAAAA,GAGH,GAAclG,QAAAsF,GAAAtF,QAAA0F,GAAA1F,QAAA4F,GAAA5F,QAAAgF,GAAAhF,QAAAiG,GAAAjG,QAAAkG,GAAAlG,QAAA6F,GAAA7F,QAAA+F,GAAA/F,QAAAmG,KAAAA,IAAAnG,EAAA,EAAA,GAtBdmG;AAsBc;AC/CX,SAAAE,EAAAtG,GAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GAA2B;AAAA,IAAAqG,OAAAA;AAAAA,IAAAnD,MAAAA;AAAAA,IAAAC,aAAAA;AAAAA,IAAAmD,cAAAA;AAAAA,EAAAA,IAAAxG,GAMhCyG,IAAiBC,KAAIC,IAAK,GAAGD,KAAIE,KAAML,IAAQlD,CAAW,IAAI,CAAC;AAAC,MAAA3C;AAAA,EAAAT,SAAAuG,KAExC9F,IAAA8E,CAAAA,MAAA;AACtBgB,IAAAA,EAAahB,GAAO,CAAC;AAAA,EAAC,GACvBvF,OAAAuG,GAAAvG,OAAAS,KAAAA,IAAAT,EAAA,CAAA;AAFD,QAAA4G,IAAwBnG;AAEvB,MAAAG;AAAA,EAAAZ,EAAA,CAAA,MAAAuG,KAAAvG,SAAAmD,KAE0BvC,IAAAiG,CAAAA,MAAA;AACzBN,IAAAA,EAAahB,GAAOpC,IAAO,CAAC;AAAA,EAAC,GAC9BnD,OAAAuG,GAAAvG,OAAAmD,GAAAnD,OAAAY,KAAAA,IAAAZ,EAAA,CAAA;AAFD,QAAA8G,IAA2BlG;AAE1B,MAAAY;AAAA,EAAAxB,EAAA,CAAA,MAAAuG,KAAAvG,SAAAmD,KAEsB3B,IAAAuF,CAAAA,MAAA;AACrBR,IAAAA,EAAahB,GAAOpC,IAAO,CAAC;AAAA,EAAC,GAC9BnD,OAAAuG,GAAAvG,OAAAmD,GAAAnD,OAAAwB,KAAAA,IAAAxB,EAAA,CAAA;AAFD,QAAAgH,IAAuBxF;AAEtB,MAAAC;AAAA,EAAAzB,EAAA,CAAA,MAAAwG,KAAAxG,SAAAuG,KAEsB9E,IAAAwF,CAAAA,MAAA;AACrBV,IAAAA,EAAahB,GAAOiB,CAAQ;AAAA,EAAC,GAC9BxG,OAAAwG,GAAAxG,OAAAuG,GAAAvG,QAAAyB,KAAAA,IAAAzB,EAAA,EAAA;AAFD,QAAAkH,IAAuBzF;AAEtB,MAAAG;AAAA,EAAA5B,EAAA,EAAA,MAAAU,OAAAC,IAAA,2BAAA,KAGUiB,IAAA;AAAA,IAAAuF,YAAc;AAAA,IAACC,IAAM;AAAA,EAAA,GAAKpH,QAAA4B,KAAAA,IAAA5B,EAAA,EAAA;AAGrB,QAAA2F,IAAAxC,MAAS;AAAC,MAAA0C;AAAA,EAAA7F,EAAA,EAAA,MAAAU,OAAAC,IAAA,2BAAA,KAGpBkF,sBAACwB,IAAA,EAAa,GAAGrH,QAAA6F,KAAAA,IAAA7F,EAAA,EAAA;AAAA,MAAA8F;AAAA,EAAA9F,EAAA,EAAA,MAAA4G,KAAA5G,UAAA2F,KALnBG,IAAA,gBAAAjF,EAACyG,KACUV,SAAAA,GACC,UAAAjB,GACC,cAAA,cAEXE,UAAAA,EAAAA,CACF,GAAa7F,QAAA4G,GAAA5G,QAAA2F,GAAA3F,QAAA8F,KAAAA,IAAA9F,EAAA,EAAA;AAGD,QAAA+F,IAAA5C,MAAS;AAAC,MAAA8C;AAAA,EAAAjG,EAAA,EAAA,MAAAU,OAAAC,IAAA,2BAAA,KAGpBsF,sBAACsB,IAAA,EAAiB,GAAGvH,QAAAiG,KAAAA,IAAAjG,EAAA,EAAA;AAAA,MAAAkG;AAAA,EAAAlG,EAAA,EAAA,MAAA8G,KAAA9G,UAAA+F,KALvBG,IAAA,gBAAArF,EAACyG,KACUR,SAAAA,GACC,UAAAf,GACC,cAAA,iBAEXE,UAAAA,EAAAA,CACF,GAAajG,QAAA8G,GAAA9G,QAAA+F,GAAA/F,QAAAkG,KAAAA,IAAAlG,EAAA,EAAA;AAGD,QAAAmG,IAAAhD,KAAQqD;AAAQ,MAAAgB;AAAA,EAAAxH,EAAA,EAAA,MAAAU,OAAAC,IAAA,2BAAA,KAG1B6G,sBAACC,IAAA,EAAkB,GAAGzH,QAAAwH,KAAAA,IAAAxH,EAAA,EAAA;AAAA,MAAA0H;AAAA,EAAA1H,EAAA,EAAA,MAAAgH,KAAAhH,UAAAmG,KALxBuB,IAAA,gBAAA7G,EAACyG,KACUN,SAAAA,GACC,UAAAb,GACC,cAAA,aAEXqB,UAAAA,EAAAA,CACF,GAAaxH,QAAAgH,GAAAhH,QAAAmG,GAAAnG,QAAA0H,KAAAA,IAAA1H,EAAA,EAAA;AAGD,QAAA2H,IAAAxE,KAAQqD;AAAQ,MAAAoB;AAAA,EAAA5H,EAAA,EAAA,MAAAU,OAAAC,IAAA,2BAAA,KAG1BiH,sBAACC,IAAA,EAAY,GAAG7H,QAAA4H,KAAAA,IAAA5H,EAAA,EAAA;AAAA,MAAA8H;AAAA,EAAA9H,EAAA,EAAA,MAAAkH,KAAAlH,UAAA2H,KALlBG,IAAA,gBAAAjH,EAACyG,KACUJ,SAAAA,GACC,UAAAS,GACC,cAAA,aAEXC,UAAAA,EAAAA,CACF,GAAa5H,QAAAkH,GAAAlH,QAAA2H,GAAA3H,QAAA8H,KAAAA,IAAA9H,EAAA,EAAA;AAAA,MAAA+H;AAAA,SAAA/H,EAAA,EAAA,MAAAkG,KAAAlG,EAAA,EAAA,MAAA0H,KAAA1H,EAAA,EAAA,MAAA8H,KAAA9H,UAAA8F,KA5BfiC,IAAA,gBAAAC,EAACC,GAAA,EAAQ,IAAArG,GACPkE,UAAAA;AAAAA,IAAAA;AAAAA,IAOAI;AAAAA,IAOAwB;AAAAA,IAOAI;AAAAA,EAAAA,GAOF,GAAM9H,QAAAkG,GAAAlG,QAAA0H,GAAA1H,QAAA8H,GAAA9H,QAAA8F,GAAA9F,QAAA+H,KAAAA,IAAA/H,EAAA,EAAA,GA7BN+H;AA6BM;ACzDH,SAAAG,GAAAnI,GAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GAAoB;AAAA,IAAAkD,MAAAA;AAAAA,IAAAC,aAAAA;AAAAA,IAAA+E,OAAAA;AAAAA,IAAAC,oBAAA3H;AAAAA,IAAA8F,cAAAA;AAAAA,IAAA8B,qBAAAA;AAAAA,EAAAA,IAAAtI;AAOT,MAAAa;AAAA,EAAAZ,SAAAS,KAHhBG,IAAAH,MAAAY,SAAA,CAAsB,GAAG,IAAI,IAAI,EAAE,IAAnCZ,GAAoCT,OAAAS,GAAAT,OAAAY,KAAAA,IAAAZ,EAAA,CAAA;AAApC,QAAAoI,IAAAxH;AAAoC,MAAAY;AAAA,EAAAxB,SAAAuG,KAIX/E,IAAAA,CAAA8G,GAAAC,MAAA;AAIvBhC,IAAAA,EAAagC,CAAO;AAAA,EAAC,GACtBvI,OAAAuG,GAAAvG,OAAAwB,KAAAA,IAAAxB,EAAA,CAAA;AALD,QAAAwI,IAAyBhH;AAKxB,MAAAC;AAAA,EAAAzB,SAAAqI,KAE+B5G,IAAA8D,CAAAA,MAAA;AAG9B8C,IAAAA,EAAoBI,SAASlD,EAAKmD,OAAOjE,OAAQ,EAAE,CAAC;AAAA,EAAC,GACtDzE,OAAAqI,GAAArI,OAAAyB,KAAAA,IAAAzB,EAAA,CAAA;AAJD,QAAA2I,IAAgClH;AAI/B,MAAAG;AAAA,SAAA5B,SAAAwI,KAAAxI,EAAA,CAAA,MAAA2I,KAAA3I,EAAA,CAAA,MAAAmD,KAAAnD,EAAA,CAAA,MAAAoD,KAAApD,UAAAoI,KAAApI,EAAA,EAAA,MAAAmI,KAGCvG,sBAACgH,IAAA,EACW,WAAA,OACHT,OAAAA,GACDhF,MAAAA,GACOC,aAAAA,GACOgF,oBAAAA,GACNI,cAAAA,GACOG,wBACHtC,kBAAAA,GAAiB,GACnCrG,OAAAwI,GAAAxI,OAAA2I,GAAA3I,OAAAmD,GAAAnD,OAAAoD,GAAApD,QAAAoI,GAAApI,QAAAmI,GAAAnI,QAAA4B,KAAAA,IAAA5B,EAAA,EAAA,GATF4B;AASE;ACnBC,SAAAiH,GAAAC,GAAA;AAAA,QAAA9I,IAAAC,EAAA,CAAA,GAGL8I,IAAYC,GAAiB,IAAI,GACjCC,IAAkBC,EAAeC,EAA0B;AAAC,MAAApJ,GAAAU;AAAA,SAAAT,EAAA,CAAA,MAAAiJ,KAAAjJ,SAAA8I,KAElD/I,IAAAA,MAAA;AACR,IAAIgJ,EAAGK,WACLH,EAAUH,GAAU;AAAA,MAAAO,OAASN;AAAAA,IAAAA,CAAK;AAAA,EACnC,GACAtI,IAAA,CAACqI,GAAUG,CAAS,GAACjJ,OAAAiJ,GAAAjJ,OAAA8I,GAAA9I,OAAAD,GAAAC,OAAAS,MAAAV,IAAAC,EAAA,CAAA,GAAAS,IAAAT,EAAA,CAAA,IAJxBsJ,GAAUvJ,GAIPU,CAAqB,GAEjBsI;AAAG;AAZL,SAAAI,GAAAI,GAAA;AAAA,SAIuCA,EAAKN;AAAU;ACM7D,SAAAO,EAAAzJ,GAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA;AAAA,MAAAwD,GAAAgG,GAAAV,GAAAtI;AAAA,EAAAT,SAAAD,KAAe;AAAA,IAAA0D,UAAAA;AAAAA,IAAAsF,KAAAA;AAAAA,IAAAW,cAAAjJ;AAAAA,IAAA,GAAAgJ;AAAAA,EAAAA,IAAA1J,GAKOC,OAAAD,GAAAC,OAAAyD,GAAAzD,OAAAyJ,GAAAzJ,OAAA+I,GAAA/I,OAAAS,MAAAgD,IAAAzD,EAAA,CAAA,GAAAyJ,IAAAzJ,EAAA,CAAA,GAAA+I,IAAA/I,EAAA,CAAA,GAAAS,IAAAT,EAAA,CAAA;AAFpB,QAAA0J,IAAAjJ,MAAAY,SAAA,KAAAZ;AAAmB,MAAAG;AAAA,SAAAZ,EAAA,CAAA,MAAAyD,KAAAzD,EAAA,CAAA,MAAAyJ,KAAAzJ,EAAA,CAAA,MAAA+I,KAAA/I,SAAA0J,KAIjB9I,sBAAC+I,GAAA,EAAuBD,cAAAA,GAAmBX,KAAAA,MAASU,gBAEpD,GAAWzJ,OAAAyD,GAAAzD,OAAAyJ,GAAAzJ,OAAA+I,GAAA/I,OAAA0J,GAAA1J,OAAAY,KAAAA,IAAAZ,EAAA,CAAA,GAFXY;AAEW;AAKf4I,EAAMI,OAAOC;AACbL,EAAM1J,aAAaA;AACnB0J,EAAMM,OAAOC;AACbP,EAAM3E,MAAMA;AACZ2E,EAAMhF,OAAO1D;AACb0I,EAAMQ,YAAYC;AAClBT,EAAMU,QAAQA;AACdV,EAAMtB,aAAaA;AACnBsB,EAAMnD,oBAAoBA;AAQ1B,SAAA4D,GAAAR,GAAA;AAAA,QAAAzJ,IAAAC,EAAA,CAAA,GACE8I,IAAYF,GAA6BY,EAAKvI,EAAG;AAAC,MAAAnB;AAAA,SAAAC,SAAAyJ,EAAAhG,YAAAzD,SAAA+I,KAE3ChJ,IAAA,gBAAAc,EAACsJ,IAAA,EAAuBpB,KAAAA,GAAMU,UAAAA,EAAKhG,UAAU,GAAoBzD,EAAA,CAAA,IAAAyJ,EAAAhG,UAAAzD,OAAA+I,GAAA/I,OAAAD,KAAAA,IAAAC,EAAA,CAAA,GAAjED;AAAiE;ACpDnE,MAAMqK,KAAqB,SACrBC,IAAe,GACfC,KAAwB,IACxBC,KAAgC,CAAC,GAAG,IAAI,IAAI,EAAE,GAE9CC,KAAoB,MACpBC,KAAmC;AAMzC,SAASC,GAAoB;AAAA,EAClCrB,OAAAA;AACW,GAAwB;AACnC,SAAO,CACL;AAAA,IACE,GAAGsB;AAAAA,IACHC,UAAUA,MAAMD,EAAcC,SAASvB,CAAK;AAAA,EAAA,GAE9C;AAAA,IACE,GAAGwB;AAAAA,IACHD,UAAU,OAAO5H,MAAS;AACxB,UAAI,CAACA,GAAM8H;AACT,eAAOD,EAAcD,SAAS,EAAE;AAKlC,YAAMG,IAAW/H,EAAK,CAAC;AACvB,UAAI,CAAC+H;AACH,eAAOF,EAAcD,SAAS,EAAE;AAGlC,YAAMI,IAAUC,OAAOC,KAAKH,CAAQ,EAAEI,OAAQC,CAAAA,MAAQA,MAAQ,IAAI,GAC5DC,IAAOrI,EAAKd,IAAK4C,CAAAA,MACrBkG,EAAQ9I,IAAKoJ,CAAAA,MAAW;AACtB,cAAM7G,IAAQK,EAAIwG,CAAM;AACxB,eAAI7G,KAAU,OAAoC,KAC9C,OAAOA,KAAU,WAAiBnC,KAAKC,UAAUkC,CAAK,IACnDA;AAAAA,MACT,CAAC,CACH;AAEA,aAAOoG,EAAcD,SAAS,CAACI,GAAS,GAAGK,CAAI,CAAC;AAAA,IAClD;AAAA,EAAA,CACD;AAEL;AAKO,SAASE,GAAYxG,IAAyB,IAAuB;AAC1E,SAAO;AAAA,IACLA,SAAAA;AAAAA,IACAE,YAAY;AAAA,IACZuG,8BAAcC,IAAAA;AAAAA,IACdC,MAAMtB;AAAAA,IACNuB,YAAY;AAAA,MACVxI,MAAMkH;AAAAA,MACNjC,oBAAoBmC;AAAAA,MACpBnH,aAAakH;AAAAA,MACbnC,OAAO;AAAA,IAAA;AAAA,IAETlF,MAAM;AAAA,MACJhC,UAAUuJ;AAAAA,MACVpJ,WAAWqJ;AAAAA,IAAAA;AAAAA,EACb;AAEJ;ACrCO,SAAAmB,GAAA9C,GAAA9F,GAAA;AAAA,QAAAhD,IAAAC,EAAA,EAAA,GAKLgJ,IAAkBC,EAAeC,EAA0B;AAAC,MAAApJ;AAAA,EAAAC,EAAA,CAAA,MAAAgD,KAAAhD,SAAA8I,KAE/C/I,IAAA8L,CAAAA,MAAA;AACT,UAAAC,IAAeC,EAAKC,QAASlD,CAAQ;AAAiC,WAC/D;AAAA,MAAAmD,mBACc,CAAC,CAACH,GAAMH;AAAAA,MAAYxI,MACjC2I,GAAMH,YAAkBxI,QAAxBkH;AAAAA,MAAwCjH,aACjC0I,GAAMH,YAAyBvI,eAA/BkH;AAAAA,MAAwDlC,oBAEnE0D,GAAMH,YAAgCvD,sBAAtCmC;AAAAA,MAC6BpC,OACxB2D,GAAMH,YAAmBxD,SAAInF,EAAI8H;AAAAA,IAAAA;AAAAA,EACzC,GACF9K,OAAAgD,GAAAhD,OAAA8I,GAAA9I,OAAAD,KAAAA,IAAAC,EAAA,CAAA;AAZH,QAAAkM,IAAwBhD,EACtBiD,EAAWpM,CAWV,CACH;AAAC,MAAAU;AAAA,EAAAT,SAAA8I,KAGYrI,IAAA2L,CAAAA,MACML,EAAKC,QAASlD,CAAQ,GACxB4C,MACd1L,OAAA8I,GAAA9I,OAAAS,KAAAA,IAAAT,EAAA,CAAA;AAJH,QAAA0L,IAAaxC,EACXiD,EAAW1L,CAGV,CACH,GAGA4L,IAAgB5F,KAAIC,IAClB,GACAD,KAAIE,KAAMuF,EAAe/D,SAAU+D,GAAe9I,eAAf,EAAkC,IAAI,CAC3E;AAAC,MAAAxC;AAAA,EAAAZ,EAAA,CAAA,MAAAqM,KAAArM,EAAA,CAAA,MAAAkM,KAAAlM,EAAA,CAAA,MAAAiJ,KAAAjJ,SAAA8I,KAIClI,IAAA2H,CAAAA,MAAA;AACE,UAAA+D,IAAoB7F,KAAIC,IAAK,GAAGD,KAAI8F,IAAKhE,GAAS8D,CAAO,CAAC;AAE1DpD,IAAAA,EAA4BH,GAAU;AAAA,MAAA6C,YACxB;AAAA,QAAA,GACPO;AAAAA,QAAe/I,MACZmJ;AAAAA,MAAAA;AAAAA,IACR,CACD;AAAA,EAAC,GACHtM,OAAAqM,GAAArM,OAAAkM,GAAAlM,OAAAiJ,GAAAjJ,OAAA8I,GAAA9I,OAAAY,KAAAA,IAAAZ,EAAA,CAAA;AAVH,QAAAwM,IAAgB5L;AAYf,MAAAY;AAAA,EAAAxB,EAAA,EAAA,MAAAkM,KAAAlM,UAAAiJ,KAAAjJ,EAAA,EAAA,MAAA8I,KAICtH,IAAAiL,CAAAA,MAAA;AACExD,IAAAA,EAA4BH,GAAU;AAAA,MAAA6C,YACxB;AAAA,QAAA,GACPO;AAAAA,QAAe9I,aACLqJ;AAAAA,MAAAA;AAAAA,IACf,CACD;AAAA,EAAC,GACHzM,QAAAkM,GAAAlM,QAAAiJ,GAAAjJ,QAAA8I,GAAA9I,QAAAwB,KAAAA,IAAAxB,EAAA,EAAA;AARH,QAAA0M,IAAuBlL;AAUtB,MAAAC;AAAA,EAAAzB,UAAAwM,KAGiC/K,IAAAA,MAAM+K,EAAQ,CAAC,GAACxM,QAAAwM,GAAAxM,QAAAyB,KAAAA,IAAAzB,EAAA,EAAA;AAAlD,QAAA2M,IAAsBlL;AAAwC,MAAAG;AAAA,EAAA5B,EAAA,EAAA,MAAAqM,KAAArM,UAAAwM,KAC7B5K,IAAAA,MAAM4K,EAAQH,CAAO,GAACrM,QAAAqM,GAAArM,QAAAwM,GAAAxM,QAAA4B,KAAAA,IAAA5B,EAAA,EAAA;AAAvD,QAAA4M,IAAqBhL;AAAuD,MAAA+D;AAAA,EAAA3F,UAAAkM,EAAA/I,QAAAnD,UAAAwM,KAE1E7G,IAAAA,MAAM6G,EAAQN,EAAe/I,OAAQ,CAAC,GAACnD,EAAA,EAAA,IAAAkM,EAAA/I,MAAAnD,QAAAwM,GAAAxM,QAAA2F,KAAAA,IAAA3F,EAAA,EAAA;AADzC,QAAA6M,IAAqBlH;AAGpB,MAAAE;AAAA,EAAA7F,UAAAkM,EAAA/I,QAAAnD,UAAAwM,KAEC3G,IAAAA,MAAM2G,EAAQN,EAAe/I,OAAQ,CAAC,GAACnD,EAAA,EAAA,IAAAkM,EAAA/I,MAAAnD,QAAAwM,GAAAxM,QAAA6F,KAAAA,IAAA7F,EAAA,EAAA;AADzC,QAAA8M,IAAyBjH;AAGxB,MAAAC;AAAAiH,EAAAA,GAAA;AAIC,QAAIrB,MAAS,YAAT,CAAsBQ,EAAeD,mBAAkB;AAEzDnG,MAAAA,IAAO9C;AAAP,YAAA+J;AAAAA,IAAW;AACZ,QAAAhH;AAAA,IAAA/F,EAAA,EAAA,MAAAgD,KAAAhD,EAAA,EAAA,MAAAkM,EAAA/I,QAAAnD,EAAA,EAAA,MAAAkM,EAAA9I,eACM2C,IAAA7C,GAAaF,GAAMkJ,EAAe/I,MAAO+I,EAAe9I,WAAY,GAACpD,QAAAgD,GAAAhD,EAAA,EAAA,IAAAkM,EAAA/I,MAAAnD,EAAA,EAAA,IAAAkM,EAAA9I,aAAApD,QAAA+F,KAAAA,IAAA/F,EAAA,EAAA,GAA5E8F,IAAOC;AAAAA,EAAqE;AAL9E,QAAAiH,IAAsBlH;AAYpB,MAAAC;AAAA,SAAA/F,EAAA,EAAA,MAAA2M,KAAA3M,EAAA,EAAA,MAAA4M,KAAA5M,EAAA,EAAA,MAAA6M,KAAA7M,EAAA,EAAA,MAAA8M,KAAA9M,EAAA,EAAA,MAAAgN,KAAAhN,EAAA,EAAA,MAAAkM,KAAAlM,EAAA,EAAA,MAAAwM,KAAAxM,UAAA0M,KAEK3G,IAAA;AAAA,IAAA,GACFmG;AAAAA,IAAec,eAAAA;AAAAA,IAAAR,SAAAA;AAAAA,IAAAE,gBAAAA;AAAAA,IAAAC,eAAAA;AAAAA,IAAAC,cAAAA;AAAAA,IAAAC,cAAAA;AAAAA,IAAAC,kBAAAA;AAAAA,EAAAA,GAQnB9M,QAAA2M,GAAA3M,QAAA4M,GAAA5M,QAAA6M,GAAA7M,QAAA8M,GAAA9M,QAAAgN,GAAAhN,QAAAkM,GAAAlM,QAAAwM,GAAAxM,QAAA0M,GAAA1M,QAAA+F,KAAAA,IAAA/F,EAAA,EAAA,GATM+F;AASN;AAlGI,SAAAoD,GAAA4C,GAAA;AAAA,SAKuCA,EAAK9C;AAAU;ACVtD,SAAAgE,GAAAnE,GAAA9F,GAAAkK,GAAA;AAAA,QAAAlN,IAAAC,EAAA,EAAA;AAAA,MAAAF;AAAA,EAAAC,SAAAkN,KAKoBnN,IAAAmN,KAAA,CAAA,GAAalN,OAAAkN,GAAAlN,OAAAD,KAAAA,IAAAC,EAAA,CAAA;AAAtC,QAAA;AAAA,IAAAmN,cAAAA;AAAAA,EAAAA,IAAyBpN,GAGzBkJ,IAAkBC,EAAeC,EAA0B,GAC3DiE,IAAkBlE,EAAemE,EAA0B;AAAC,MAAA5M;AAAA,EAAAT,SAAA8I,KAE/CrI,IAAA2L,CAAAA,MAAA;AACT,UAAAN,IAAeC,EAAKC,QAASlD,CAAQ;AAAiC,WAC/D;AAAA,MAAAwE,aACQ,CAAC,CAACxB,GAAM7I;AAAAA,MAAMhC,UACjB6K,GAAM7I,MAAgBhC,YAAtBuJ;AAAAA,MAA2CpJ,WAC1C0K,GAAM7I,MAAiB7B,aAAvBqJ;AAAAA,IAAAA;AAAAA,EACZ,GACFzK,OAAA8I,GAAA9I,OAAAS,KAAAA,IAAAT,EAAA,CAAA;AARH,QAAAuN,IAAuBrE,EACrBiD,EAAW1L,CAOV,CACH;AAAC,MAAAG;AAAA,EAAAZ,SAAA8I,KAGYlI,IAAA4M,CAAAA,MACMzB,EAAKC,QAASlD,CAAQ,GACxB4C,MACd1L,OAAA8I,GAAA9I,OAAAY,KAAAA,IAAAZ,EAAA,CAAA;AAJH,QAAA0L,IAAaxC,EACXiD,EAAWvL,CAGV,CACH;AAAC,MAAAY;AAAA,EAAAxB,EAAA,CAAA,MAAA0L,KAAA1L,EAAA,CAAA,MAAAmN,KAAAnN,EAAA,CAAA,MAAAiJ,KAAAjJ,EAAA,CAAA,MAAAuN,KAAAvN,UAAA8I,KAICtH,IAAAiM,CAAAA,MAAA;AACE,QAAAC,IAAkC;AAElC,IAAIH,EAActM,aAAcwM,MAE9BC,IAAeH,EAAcnM,cAAe,QAA7B,SAAA,QAGjB6H,EAA4BH,GAAU;AAAA,MAAA7F,MAC9B;AAAA,QAAA,GACDsK;AAAAA,QAActM,UACPwM;AAAAA,QAAcrM,WACbsM;AAAAA,MAAAA;AAAAA,IACb,CACD,GAEGhC,MAAS,YAATyB,KACFA,EAAaM,GAAgBC,CAAY;AAAA,EAC1C,GACF1N,OAAA0L,GAAA1L,OAAAmN,GAAAnN,OAAAiJ,GAAAjJ,OAAAuN,GAAAvN,QAAA8I,GAAA9I,QAAAwB,KAAAA,IAAAxB,EAAA,EAAA;AApBH,QAAA2N,IAAmBnM;AAsBlB,MAAAC;AAAA,EAAAzB,EAAA,EAAA,MAAA0L,KAAA1L,EAAA,EAAA,MAAAmN,KAAAnN,EAAA,EAAA,MAAAiJ,KAAAjJ,EAAA,EAAA,MAAAuN,KAAAvN,UAAA8I,KAICrH,IAAAA,CAAAmM,GAAAC,MAAA;AACE5E,IAAAA,EAA4BH,GAAU;AAAA,MAAA7F,MAC9B;AAAA,QAAA,GACDsK;AAAAA,QAActM,UACP2M;AAAAA,QAAWxM,WACVsM;AAAAA,MAAAA;AAAAA,IACb,CACD,GAEGhC,MAAS,YAATyB,KAAAS,KACFT,EAAaS,GAAaF,CAAY;AAAA,EACvC,GACF1N,QAAA0L,GAAA1L,QAAAmN,GAAAnN,QAAAiJ,GAAAjJ,QAAAuN,GAAAvN,QAAA8I,GAAA9I,QAAAyB,KAAAA,IAAAzB,EAAA,EAAA;AAbH,QAAA8N,IAAgBrM;AAef,MAAAG;AAAA,EAAA5B,EAAA,EAAA,MAAAoN,KAAApN,UAAAiJ,KAAAjJ,EAAA,EAAA,MAAA8I,KAG6BlH,IAAAA,MAAA;AAC5B,UAAAmM,IAAeX,EAA4BtE,CAAQ;AACnD,IAAKgD,GAAM7I,QAEXgG,EAA4BH,GAAU;AAAA,MAAA7F,MAC9B;AAAA,QAAA,GACD6I,EAAM7I;AAAAA,QAAKhC,UACJ;AAAA,QAAIG,WACH;AAAA,MAAA;AAAA,IACb,CACD;AAAA,EAAC,GACHpB,QAAAoN,GAAApN,QAAAiJ,GAAAjJ,QAAA8I,GAAA9I,QAAA4B,KAAAA,IAAA5B,EAAA,EAAA;AAXD,QAAAgO,IAAkBpM;AAWkB,MAAA+D;AAAAoH,EAAAA,GAAA;AAIlC,QACErB,MAAS,YAAT,CACC6B,EAActM,YADf,CAECsM,EAAcD,aAAY;AAI3B3H,MAAAA,IAAO3C;AAAP,YAAA+J;AAAAA,IAAW;AACZ,QAAAlH;AAAA,IAAA7F,EAAA,EAAA,MAAAgD,KAAAhD,EAAA,EAAA,MAAAuN,EAAAtM,YAAAjB,EAAA,EAAA,MAAAuN,EAAAnM,aACMyE,IAAA9C,GAASC,GAAMuK,EAActM,UAAWsM,EAAcnM,SAAU,GAACpB,QAAAgD,GAAAhD,EAAA,EAAA,IAAAuN,EAAAtM,UAAAjB,EAAA,EAAA,IAAAuN,EAAAnM,WAAApB,QAAA6F,KAAAA,IAAA7F,EAAA,EAAA,GAAxE2F,IAAOE;AAAAA,EAAiE;AAV1E,QAAAoI,IAAmBtI;AAiBjB,MAAAE;AAAA,SAAA7F,EAAA,EAAA,MAAAgO,KAAAhO,EAAA,EAAA,MAAA8N,KAAA9N,EAAA,EAAA,MAAAuN,KAAAvN,EAAA,EAAA,MAAAiO,KAAAjO,UAAA2N,KAEK9H,IAAA;AAAA,IAAA,GACF0H;AAAAA,IAAcU,YAAAA;AAAAA,IAAAN,YAAAA;AAAAA,IAAAG,SAAAA;AAAAA,IAAAE,WAAAA;AAAAA,EAAAA,GAKlBhO,QAAAgO,GAAAhO,QAAA8N,GAAA9N,QAAAuN,GAAAvN,QAAAiO,GAAAjO,QAAA2N,GAAA3N,QAAA6F,KAAAA,IAAA7F,EAAA,EAAA,GANM6F;AAMN;AA/GI,SAAAwH,GAAAxB,GAAA;AAAA,SASuCE,EAAKqB;AAAU;AATtD,SAAAjE,GAAA4C,GAAA;AAAA,SAQuCA,EAAK9C;AAAU;ACXtD,SAAAiF,GAAApF,GAAAoE,GAAA;AAAA,QAAAlN,IAAAC,EAAA,EAAA;AAAA,MAAAF;AAAA,EAAAC,SAAAkN,KAIyBnN,IAAAmN,KAAA,CAAA,GAAalN,OAAAkN,GAAAlN,OAAAD,KAAAA,IAAAC,EAAA,CAAA;AAA3C,QAAA;AAAA,IAAAmO,mBAAAA;AAAAA,EAAAA,IAA8BpO,GAG9BkJ,IAAkBC,EAAeC,EAA0B,GAC3DiE,IAAkBlE,EAAemE,EAA0B;AAAC,MAAA5M;AAAA,EAAAT,SAAA8I,KAE/CrI,IAAA2L,CAAAA,MACML,EAAKC,QAASlD,CAAQ,GACxB0C,UACdxL,OAAA8I,GAAA9I,OAAAS,KAAAA,IAAAT,EAAA,CAAA;AAJH,QAAAwL,IAAiBtC,EACfiD,EAAW1L,CAGV,CACH;AAAC,MAAAG;AAAA,EAAAZ,SAAAwL,KAIO5K,IAAA4K,yBAAgBC,IAAAA,GAAsBzL,OAAAwL,GAAAxL,OAAAY,KAAAA,IAAAZ,EAAA,CAAA;AAD9C,QAAAoO,IACQxN;AAEP,MAAAY;AAAA,EAAAxB,SAAAoO,KAIC5M,IAAAN,CAAAA,MAAyBkN,EAAWC,IAAKnN,CAAE,GAAClB,OAAAoO,GAAApO,OAAAwB,KAAAA,IAAAxB,EAAA,CAAA;AAD9C,QAAAgF,IAAmBxD;AAGlB,MAAAC;AAAA,EAAAzB,SAAAoO,KAIC3M,IAAA4J,CAAAA,MACMA,EAAIP,WAAY,IAAU,KACvBO,EAAIiD,MAAOxJ,CAAAA,MAASsJ,EAAWC,IAAKvJ,EAAG5D,EAAG,CAAC,GACnDlB,OAAAoO,GAAApO,OAAAyB,KAAAA,IAAAzB,EAAA,CAAA;AAJH,QAAAM,IAAsBmB;AAMrB,MAAAG;AAAA,EAAA5B,UAAAoO,KAICxM,IAAA2M,CAAAA,MAAA;AACE,QAAIlD,EAAIP,WAAY;AAAC,aAAS;AAC9B,UAAA0D,IAAsBnD,EAAIF,OAAQsD,CAAAA,MAASL,EAAWC,IAAKvJ,EAAG5D,EAAG,CAAC,EAAC4J;AAAO,WACnE0D,IAAgB,KAAKA,IAAgBnD,EAAIP;AAAAA,EAAO,GACxD9K,QAAAoO,GAAApO,QAAA4B,KAAAA,IAAA5B,EAAA,EAAA;AALH,QAAAO,IAAwBqB;AAOvB,MAAA+D;AAAA,EAAA3F,EAAA,EAAA,MAAAoN,KAAApN,EAAA,EAAA,MAAAmO,KAAAnO,EAAA,EAAA,MAAAiJ,KAAAjJ,UAAA8I,KAICnD,IAAA+I,CAAAA,MAAA;AAEE,UAAAC,IADevB,EAA4BtE,CAAQ,GACrB0C,YAAN,oBAAwBC,IAAAA,GAEhDmD,IAAe,IAAInD,IAAIkD,CAAe;AACtC,IAAIC,EAAMP,IAAKnN,CAAE,IACf0N,EAAMC,OAAQ3N,CAAE,IAEhB0N,EAAME,IAAK5N,CAAE,GAGf+H,EAA4BH,GAAU;AAAA,MAAA0C,UAC1BoD;AAAAA,IAAAA,CACX,GAEGT,KACFA,EAAkBS,CAAM;AAAA,EACzB,GACF5O,QAAAoN,GAAApN,QAAAmO,GAAAnO,QAAAiJ,GAAAjJ,QAAA8I,GAAA9I,QAAA2F,KAAAA,IAAA3F,EAAA,EAAA;AAnBH,QAAA+O,IAAkBpJ;AAqBjB,MAAAE;AAAA,EAAA7F,EAAA,EAAA,MAAAoN,KAAApN,EAAA,EAAA,MAAAmO,KAAAnO,EAAA,EAAA,MAAAiJ,KAAAjJ,UAAA8I,KAICjD,IAAAmJ,CAAAA,MAAA;AAEE,UAAAC,IADe7B,EAA4BtE,CAAQ,GACrB0C,YAAN,oBAAwBC,IAAAA,GAEhDyD,IAAoB7D,EAAIiD,MAAOa,CAAAA,MAASR,EAAeN,IAAKvJ,EAAG5D,EAAG,CAAC,GACnEkO,IAAe,IAAI3D,IAAIkD,CAAe;AAEtC,IAAIO,IAEF7D,EAAIgE,QAASC,CAAAA,MAASV,EAAMC,OAAQ/J,EAAG5D,EAAG,CAAC,IAG3CmK,EAAIgE,QAASE,CAAAA,MAASX,EAAME,IAAKhK,EAAG5D,EAAG,CAAC,GAG1C+H,EAA4BH,GAAU;AAAA,MAAA0C,UAC1BoD;AAAAA,IAAAA,CACX,GAEGT,KACFA,EAAkBS,CAAM;AAAA,EACzB,GACF5O,QAAAoN,GAAApN,QAAAmO,GAAAnO,QAAAiJ,GAAAjJ,QAAA8I,GAAA9I,QAAA6F,KAAAA,IAAA7F,EAAA,EAAA;AAvBH,QAAAwP,IAAkB3J;AAyBjB,MAAAC;AAAA,EAAA9F,EAAA,EAAA,MAAAoN,KAAApN,EAAA,EAAA,MAAAmO,KAAAnO,EAAA,EAAA,MAAAiJ,KAAAjJ,UAAA8I,KAIChD,IAAA2J,CAAAA,MAAA;AAEE,UAAAC,IADetC,EAA4BtE,CAAQ,GACrB0C,YAAN,oBAAwBC,IAAAA,GAEhDkE,IAAe,IAAIlE,IAAIkD,CAAe;AACtCc,IAAAA,EAAGJ,QAASO,CAAAA,MAAQhB,EAAME,IAAK5N,CAAE,CAAC,GAElC+H,EAA4BH,GAAU;AAAA,MAAA0C,UAC1BoD;AAAAA,IAAAA,CACX,GAEGT,KACFA,EAAkBS,CAAM;AAAA,EACzB,GACF5O,QAAAoN,GAAApN,QAAAmO,GAAAnO,QAAAiJ,GAAAjJ,QAAA8I,GAAA9I,QAAA8F,KAAAA,IAAA9F,EAAA,EAAA;AAfH,QAAA6P,IAAmB/J;AAiBlB,MAAAC;AAAA,EAAA/F,EAAA,EAAA,MAAAoN,KAAApN,EAAA,EAAA,MAAAmO,KAAAnO,EAAA,EAAA,MAAAiJ,KAAAjJ,UAAA8I,KAIC/C,IAAA+J,CAAAA,MAAA;AAEE,UAAAC,IADe3C,EAA4BtE,CAAQ,GACrB0C,YAAN,oBAAwBC,IAAAA,GAEhDuE,IAAe,IAAIvE,IAAIkD,CAAe;AACtCc,IAAAA,EAAGJ,QAASY,CAAAA,MAAQrB,EAAMC,OAAQ3N,CAAE,CAAC,GAErC+H,EAA4BH,GAAU;AAAA,MAAA0C,UAC1BoD;AAAAA,IAAAA,CACX,GAEGT,KACFA,EAAkBS,CAAM;AAAA,EACzB,GACF5O,QAAAoN,GAAApN,QAAAmO,GAAAnO,QAAAiJ,GAAAjJ,QAAA8I,GAAA9I,QAAA+F,KAAAA,IAAA/F,EAAA,EAAA;AAfH,QAAAkQ,IAAqBnK;AAiBpB,MAAAE;AAAA,EAAAjG,EAAA,EAAA,MAAAmO,KAAAnO,UAAAiJ,KAAAjJ,EAAA,EAAA,MAAA8I,KAGkC7C,IAAAA,MAAA;AACjC,UAAAkK,wBAAmB1E,IAAAA;AAEnBxC,IAAAA,EAA4BH,GAAU;AAAA,MAAA0C,UAC1BoD;AAAAA,IAAAA,CACX,GAEGT,KACFA,EAAkBS,CAAM;AAAA,EACzB,GACF5O,QAAAmO,GAAAnO,QAAAiJ,GAAAjJ,QAAA8I,GAAA9I,QAAAiG,KAAAA,IAAAjG,EAAA,EAAA;AAVD,QAAAoQ,IAAuBnK;AAUqB,MAAAC;AAAA,SAAAlG,EAAA,EAAA,MAAAoQ,KAAApQ,EAAA,EAAA,MAAAkQ,KAAAlQ,UAAAM,KAAAN,EAAA,EAAA,MAAAO,KAAAP,EAAA,EAAA,MAAAgF,KAAAhF,EAAA,EAAA,MAAA6P,KAAA7P,EAAA,EAAA,MAAAoO,KAAApO,EAAA,EAAA,MAAAwP,KAAAxP,UAAA+O,KAErC7I,IAAA;AAAA,IAAAkI,aAAAA;AAAAA,IAAApJ,YAAAA;AAAAA,IAAA1E,eAAAA;AAAAA,IAAAC,iBAAAA;AAAAA,IAAAwO,WAAAA;AAAAA,IAAAS,WAAAA;AAAAA,IAAAK,YAAAA;AAAAA,IAAAK,cAAAA;AAAAA,IAAAE,gBAAAA;AAAAA,EAAAA,GAUNpQ,QAAAoQ,GAAApQ,QAAAkQ,GAAAlQ,QAAAM,GAAAN,QAAAO,GAAAP,QAAAgF,GAAAhF,QAAA6P,GAAA7P,QAAAoO,GAAApO,QAAAwP,GAAAxP,QAAA+O,GAAA/O,QAAAkG,KAAAA,IAAAlG,EAAA,EAAA,GAVMkG;AAUN;AAlKI,SAAAmH,GAAAxB,GAAA;AAAA,SAQuCE,EAAKqB;AAAU;AARtD,SAAAjE,GAAA4C,GAAA;AAAA,SAOuCA,EAAK9C;AAAU;ACtBtD,SAAAoH,GAAAtQ,GAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GAAuB;AAAA,IAAA8E,SAAAtE;AAAAA,IAAA4K,MAAAzK;AAAAA,EAAAA,IAAAb,GAAEgF,IAAAtE,MAAAY,SAAA,IAAAZ,GAAa4K,IAAAzK,MAAAS,SAAA,IAAAT;AAAQ,MAAAY;AAAA,EAAAxB,SAAA+E,KAI7CvD,IAAA,gBAAAX,EAACgJ,GAAA,EACC,UAAA,gBAAAhJ,EAACyP,GAAA,EACEtO,gBAAKuO,KAAM;AAAA,IAAAzF,QAAU/F;AAAAA,EAAAA,CAAS,EAAC7C,IAAKiH,EAIpC,GACH,EAAA,CACF,GAAYnJ,OAAA+E,GAAA/E,OAAAwB,KAAAA,IAAAxB,EAAA,CAAA;AAAA,MAAAyB;AAAA,EAAAzB,SAAAqL,KAET5J,IAAAO,MAAKuO,KAAM;AAAA,IAAAzF,QAAUO;AAAAA,EAAAA,CAAM,GAACrL,OAAAqL,GAAArL,OAAAyB,KAAAA,IAAAzB,EAAA,CAAA;AAAA,MAAA4B;AAAA,EAAA5B,EAAA,CAAA,MAAA+E,KAAA/E,SAAAyB,KAD/BG,IAAA,gBAAAf,EAACkJ,GAAA,EACEtI,UAAAA,EAA4BS,IAAK,CAAAsO,GAAAC,MAChC,gBAAA5P,EAACyP,GAAA,EACEtO,UAAAA,MAAKuO,KAAM;AAAA,IAAAzF,QAAU/F;AAAAA,EAAAA,CAAS,EAAC7C,IAAKmL,EAIpC,EAAA,GALYoD,CAMf,CACD,EAAA,CACH,GAAYzQ,OAAA+E,GAAA/E,OAAAyB,GAAAzB,OAAA4B,KAAAA,IAAA5B,EAAA,CAAA;AAAA,MAAA2F;AAAA,SAAA3F,EAAA,CAAA,MAAAwB,KAAAxB,SAAA4B,KArBhB+D,IAAA,gBAAA9E,EAACoH,GAAA,EAAe,cAAA,kBACd,4BAACuB,GAAA,EACChI,UAAAA;AAAAA,IAAAA;AAAAA,IASAI;AAAAA,EAAAA,EAAAA,CAWF,EAAA,CACF,GAAM5B,OAAAwB,GAAAxB,OAAA4B,GAAA5B,OAAA2F,KAAAA,IAAA3F,EAAA,CAAA,GAvBN2F;AAuBM;AAzBH,SAAA0H,GAAAqD,GAAAC,GAAA;AAAA,SAiBS,gBAAA9P,EAACC,KACC,UAAA,gBAAAD,EAAC+P,GAAA,EAAe,OAAA,OAAc,YAAE,EAAA,GADlBD,CAEhB;AAAY;AAnBrB,SAAAxH,GAAA0H,GAAAC,GAAA;AAAA,SAOO,gBAAAjQ,EAACC,KACC,UAAA,gBAAAD,EAAC+P,GAAA,EAAe,OAAA,OAAc,YAAE,EAAA,GADlBE,CAEhB;AAAY;ACpBnB,SAASC,GAAiBjM,GAAyB;AACxD,QAAMkM,IAAsB;AAAA,IAAE9P,IAAI4D,EAAI5D;AAAAA,EAAAA;AAEtC,aAAW,CAACkK,GAAK3G,CAAK,KAAKwG,OAAOgG,QAAQnM,CAAG;AAC3C,QAAIsG,MAAQ;AAGZ,UACE,OAAO3G,KAAU,YACjB,OAAOA,KAAU,YACjB,OAAOA,KAAU,aACjBA,MAAU;AAEVuM,QAAAA,EAAU5F,CAAG,IAAI3G;AAAAA,eAGVzC,MAAMC,QAAQwC,CAAK,KAAK,OAAOA,KAAU;AAChD,YAAI;AAEFnC,eAAKC,UAAUkC,CAAK,GACpBuM,EAAU5F,CAAG,IAAI3G;AAAAA,QACnB,QAAQ;AACNuM,UAAAA,EAAU5F,CAAG,IAAI/J;AAAAA,QACnB;AAAA;AAIA2P,QAAAA,EAAU5F,CAAG,IAAI/J;AAIrB,SAAO2P;AACT;AAQO,SAASE,GACdlO,GAC6B;AAC7B,SAAOA,GAAMd,IAAI6O,EAAgB;AACnC;ACnDO,MAAMI,KAAS;AAAA,EACpBC,WAAW;AAAA,IACT7P,OAAO;AAAA,IACP8P,UAAU;AAAA,EAAA;AAAA,EAEZC,OAAO;AAAA,IACLC,UAAU;AAAA,EAAA;AAAA,EAEZC,YAAY;AAAA,IACVC,YAAY;AAAA,IACZC,iBAAiBA,CAACC,MAAiBA,EAAMC,QAAQC,WAAWC;AAAAA,EAAAA;AAAAA,EAE9DhN,KAAK;AAAA,IACH,oCAAoC;AAAA,MAClCiN,QAAQ;AAAA,IAAA;AAAA,EACV;AAAA,EAEFC,UAAU;AAAA,IACR,WAAW;AAAA,MACTN,iBAAiBA,CAACC,MAAiBA,EAAMC,QAAQK,OAAOC;AAAAA,IAAAA;AAAAA,EAC1D;AAAA,EAEFC,aAAa;AAAA,IACXT,iBAAiBA,CAACC,MAAiBA,EAAMC,QAAQK,OAAOzG;AAAAA,IACxD,WAAW;AAAA,MACTkG,iBAAiBA,CAACC,MAAiBA,EAAMC,QAAQK,OAAOzG;AAAAA,IAAAA;AAAAA,EAC1D;AAAA,EAEFG,YAAY;AAAA,IACVyG,WAAWA,CAACT,MAAiB,aAAaA,EAAMC,QAAQS,OAAO;AAAA,EAAA;AAEnE;"}
|