@carto/ps-react-ui 4.6.1 → 4.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  import { jsx as b, jsxs as ne, Fragment as he } from "react/jsx-runtime";
2
2
  import { c as U } from "react/compiler-runtime";
3
- import { IconButton as K, DialogContent as Ae, Dialog as Pe, Typography as We, DialogTitle as Be, CircularProgress as Re, MenuItem as xe, ListItemIcon as $e, ListItemText as Ee, Menu as Ce, useTheme as Fe, Box as ke, TextField as Me, InputAdornment as be, SvgIcon as Ge } from "@mui/material";
3
+ import { IconButton as K, DialogContent as Ae, Dialog as We, Typography as Pe, DialogTitle as Be, CircularProgress as Re, MenuItem as xe, ListItemIcon as $e, ListItemText as Ee, Menu as Ce, useTheme as Fe, Box as ke, TextField as Me, InputAdornment as be, SvgIcon as Ge } from "@mui/material";
4
4
  import { w as g } from "../widget-store-Bw5zRUGg.js";
5
5
  import { u as Q } from "../use-widget-selector-DFl2hW0R.js";
6
6
  import { FullscreenOutlined as Ze, Close as Ve, FileDownloadOutlined as He, PercentOutlined as Ne, SubdirectoryArrowLeftOutlined as je, ZoomInOutlined as Ue, CheckBoxOutlined as Ke, SearchOutlined as Le, ClearOutlined as Ye, HighlightAltOutlined as qe } from "@mui/icons-material";
@@ -38,7 +38,7 @@ function tn(n) {
38
38
  Icon: m,
39
39
  IconButtonProps: S,
40
40
  DialogContentProps: _,
41
- DialogProps: y
41
+ DialogProps: T
42
42
  } = n, o = _ === void 0 ? ut : _;
43
43
  let l, r;
44
44
  e[0] !== o ? ({
@@ -50,9 +50,9 @@ function tn(n) {
50
50
  title: a
51
51
  } = Q(t, ft);
52
52
  let u;
53
- e[3] !== t ? (u = (P) => {
53
+ e[3] !== t ? (u = (W) => {
54
54
  g.setWidget(t, {
55
- isFullScreen: P.isFullScreen
55
+ isFullScreen: W.isFullScreen
56
56
  });
57
57
  }, e[3] = t, e[4] = u) : u = e[4];
58
58
  const i = u;
@@ -71,7 +71,7 @@ function tn(n) {
71
71
  }), e[13] = i, e[14] = k) : k = e[14];
72
72
  const A = `fullscreen-dialog-title-${t}`;
73
73
  let w;
74
- e[15] !== a ? (w = /* @__PURE__ */ b(We, { variant: "subtitle1", component: "span", children: a }), e[15] = a, e[16] = w) : w = e[16];
74
+ e[15] !== a ? (w = /* @__PURE__ */ b(Pe, { variant: "subtitle1", component: "span", children: a }), e[15] = a, e[16] = w) : w = e[16];
75
75
  let D;
76
76
  e[17] !== i ? (D = () => i({
77
77
  isFullScreen: !1
@@ -85,18 +85,18 @@ function tn(n) {
85
85
  w,
86
86
  E
87
87
  ] }), e[22] = A, e[23] = w, e[24] = E, e[25] = z) : z = e[25];
88
- let T;
89
- e[26] !== r ? (T = {
88
+ let y;
89
+ e[26] !== r ? (y = {
90
90
  ...ve.content,
91
91
  ...r
92
- }, e[26] = r, e[27] = T) : T = e[27];
92
+ }, e[26] = r, e[27] = y) : y = e[27];
93
93
  let h;
94
- e[28] !== l || e[29] !== p || e[30] !== T ? (h = /* @__PURE__ */ b(Ae, { sx: T, ...l, children: p }), e[28] = l, e[29] = p, e[30] = T, e[31] = h) : h = e[31];
94
+ e[28] !== l || e[29] !== p || e[30] !== y ? (h = /* @__PURE__ */ b(Ae, { sx: y, ...l, children: p }), e[28] = l, e[29] = p, e[30] = y, e[31] = h) : h = e[31];
95
95
  let I;
96
- e[32] !== y || e[33] !== z || e[34] !== h || e[35] !== O || e[36] !== C || e[37] !== k ? (I = /* @__PURE__ */ ne(Pe, { maxWidth: !1, open: O, keepMounted: !0, "aria-labelledby": C, ...y, onClose: k, children: [
96
+ e[32] !== T || e[33] !== z || e[34] !== h || e[35] !== O || e[36] !== C || e[37] !== k ? (I = /* @__PURE__ */ ne(We, { maxWidth: !1, open: O, keepMounted: !0, "aria-labelledby": C, ...T, onClose: k, children: [
97
97
  z,
98
98
  h
99
- ] }), e[32] = y, e[33] = z, e[34] = h, e[35] = O, e[36] = C, e[37] = k, e[38] = I) : I = e[38];
99
+ ] }), e[32] = T, e[33] = z, e[34] = h, e[35] = O, e[36] = C, e[37] = k, e[38] = I) : I = e[38];
100
100
  let L;
101
101
  return e[39] !== I || e[40] !== v ? (L = /* @__PURE__ */ ne(he, { children: [
102
102
  v,
@@ -118,29 +118,29 @@ function nn(n) {
118
118
  Icon: m,
119
119
  IconButtonProps: S
120
120
  } = n, _ = p === void 0 ? mt : p, {
121
- data: y
121
+ data: T
122
122
  } = Q(t, gt), [o, l] = ge(!1), [r, s] = ge(null);
123
123
  let a;
124
- e[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (a = (P) => {
125
- P.stopPropagation(), s(P.currentTarget);
124
+ e[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (a = (W) => {
125
+ W.stopPropagation(), s(W.currentTarget);
126
126
  }, e[0] = a) : a = e[0];
127
127
  const u = a;
128
128
  let i;
129
- e[1] !== t ? (i = (P, W) => {
129
+ e[1] !== t ? (i = (W, P) => {
130
130
  const B = document.createElement("a");
131
- B.href = P, B.download = W.filename ?? t, B.style.display = "none", document.body.appendChild(B), B.click(), document.body.removeChild(B), W.callback?.(B.href);
131
+ B.href = W, B.download = P.filename ?? t, B.style.display = "none", document.body.appendChild(B), B.click(), document.body.removeChild(B), P.callback?.(B.href);
132
132
  }, e[1] = t, e[2] = i) : i = e[2];
133
133
  const c = i;
134
134
  let d;
135
- e[3] !== y || e[4] !== c ? (d = async (P, W) => {
136
- P.stopPropagation(), l(!0), s(null);
137
- const B = await W.modifier(y);
135
+ e[3] !== T || e[4] !== c ? (d = async (W, P) => {
136
+ W.stopPropagation(), l(!0), s(null);
137
+ const B = await P.modifier(T);
138
138
  if (!B) {
139
139
  l(!1);
140
140
  return;
141
141
  }
142
- c(B, W), l(!1);
143
- }, e[3] = y, e[4] = c, e[5] = d) : d = e[5];
142
+ c(B, P), l(!1);
143
+ }, e[3] = T, e[4] = c, e[5] = d) : d = e[5];
144
144
  const v = d, O = _.ariaLabel ?? "download options", C = o || f.length === 0, k = o || r ? "active" : "";
145
145
  let A;
146
146
  e[6] !== m || e[7] !== o ? (A = o ? /* @__PURE__ */ b(Re, { size: 18, color: "inherit" }) : m ?? /* @__PURE__ */ b(He, {}), e[6] = m, e[7] = o, e[8] = A) : A = e[8];
@@ -155,27 +155,27 @@ function nn(n) {
155
155
  horizontal: "right"
156
156
  }, e[15] = D, e[16] = x) : (D = e[15], x = e[16]);
157
157
  const E = !!r;
158
- let z, T;
159
- e[17] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (z = () => s(null), T = {
158
+ let z, y;
159
+ e[17] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (z = () => s(null), y = {
160
160
  sx: {
161
161
  paddingBottom: 0
162
162
  }
163
- }, e[17] = z, e[18] = T) : (z = e[17], T = e[18]);
163
+ }, e[17] = z, e[18] = y) : (z = e[17], y = e[18]);
164
164
  let h;
165
165
  if (e[19] !== v || e[20] !== f) {
166
- let P;
167
- e[22] !== v ? (P = (W) => /* @__PURE__ */ ne(xe, { disabled: W.disabled, onClick: (B) => {
168
- v(B, W);
166
+ let W;
167
+ e[22] !== v ? (W = (P) => /* @__PURE__ */ ne(xe, { disabled: P.disabled, onClick: (B) => {
168
+ v(B, P);
169
169
  }, children: [
170
- W.icon && /* @__PURE__ */ b($e, { sx: {
170
+ P.icon && /* @__PURE__ */ b($e, { sx: {
171
171
  color: "text.primary"
172
- }, children: W.icon }),
173
- /* @__PURE__ */ b(Ee, { children: W.label })
174
- ] }, W.id), e[22] = v, e[23] = P) : P = e[23], h = f.map(P), e[19] = v, e[20] = f, e[21] = h;
172
+ }, children: P.icon }),
173
+ /* @__PURE__ */ b(Ee, { children: P.label })
174
+ ] }, P.id), e[22] = v, e[23] = W) : W = e[23], h = f.map(W), e[19] = v, e[20] = f, e[21] = h;
175
175
  } else
176
176
  h = e[21];
177
177
  let I;
178
- e[24] !== r || e[25] !== E || e[26] !== h ? (I = /* @__PURE__ */ b(Ce, { variant: "menu", elevation: 8, anchorOrigin: D, transformOrigin: x, anchorEl: r, open: E, onClose: z, MenuListProps: T, children: h }), e[24] = r, e[25] = E, e[26] = h, e[27] = I) : I = e[27];
178
+ e[24] !== r || e[25] !== E || e[26] !== h ? (I = /* @__PURE__ */ b(Ce, { variant: "menu", elevation: 8, anchorOrigin: D, transformOrigin: x, anchorEl: r, open: E, onClose: z, MenuListProps: y, children: h }), e[24] = r, e[25] = E, e[26] = h, e[27] = I) : I = e[27];
179
179
  let L;
180
180
  return e[28] !== I || e[29] !== w ? (L = /* @__PURE__ */ ne(he, { children: [
181
181
  w,
@@ -227,49 +227,54 @@ function on(n) {
227
227
  labels: m,
228
228
  Icon: S,
229
229
  IconButtonProps: _
230
- } = n, y = f === void 0 ? 10 : f, o = p === void 0 ? !1 : p, l = le(void 0);
230
+ } = n, T = f === void 0 ? 10 : f, o = p === void 0 ? !1 : p, l = le(void 0);
231
231
  let r;
232
- e[0] !== o ? (r = (T) => ({
233
- isRelative: T?.isRelative ?? o
232
+ e[0] !== o ? (r = (y) => ({
233
+ isRelative: y?.isRelative ?? o
234
234
  }), e[0] = o, e[1] = r) : r = e[1];
235
235
  const {
236
236
  isRelative: s
237
237
  } = Q(t, r);
238
238
  let a, u;
239
239
  e[2] !== o || e[3] !== t ? (a = () => {
240
- g.getWidget(t)?.isRelative === void 0 && g.setWidget(t, {
240
+ const y = g.getWidget(t);
241
+ y?.isRelative === void 0 && (o ? g.setWidget(t, {
242
+ isRelative: !0,
243
+ originalFormatter: y?.formatter,
244
+ originalMax: y?.max
245
+ }) : g.setWidget(t, {
241
246
  isRelative: o
242
- });
247
+ }));
243
248
  }, u = [t, o], e[2] = o, e[3] = t, e[4] = a, e[5] = u) : (a = e[4], u = e[5]), $(a, u);
244
249
  let i, c;
245
- e[6] !== o || e[7] !== t || e[8] !== y ? (i = () => (g.registerTool(t, {
250
+ e[6] !== o || e[7] !== t || e[8] !== T ? (i = () => (g.registerTool(t, {
246
251
  id: ce,
247
- order: y,
252
+ order: T,
248
253
  enabled: o,
249
254
  fn: pt
250
- }), () => g.unregisterTool(t, ce)), c = [t, y, o], e[6] = o, e[7] = t, e[8] = y, e[9] = i, e[10] = c) : (i = e[9], c = e[10]), $(i, c);
255
+ }), () => g.unregisterTool(t, ce)), c = [t, T, o], e[6] = o, e[7] = t, e[8] = T, e[9] = i, e[10] = c) : (i = e[9], c = e[10]), $(i, c);
251
256
  let d, v;
252
257
  e[11] !== t || e[12] !== s ? (d = () => {
253
258
  g.setToolEnabled(t, ce, s);
254
259
  }, v = [t, s], e[11] = t, e[12] = s, e[13] = d, e[14] = v) : (d = e[13], v = e[14]), $(d, v);
255
260
  let O;
256
- e[15] !== t || e[16] !== y ? (O = () => (g.registerTool(t, {
261
+ e[15] !== t || e[16] !== T ? (O = () => (g.registerTool(t, {
257
262
  id: Ie,
258
263
  type: "config",
259
- order: y,
264
+ order: T,
260
265
  enabled: !0,
261
- fn: (T) => {
262
- const h = T, I = g.getWidget(t), L = I?.sourceData != null && !(Array.isArray(I.sourceData) && I.sourceData.length === 0);
266
+ fn: (y) => {
267
+ const h = y, I = g.getWidget(t), L = I?.sourceData != null && !(Array.isArray(I.sourceData) && I.sourceData.length === 0);
263
268
  if (I?.isRelative) {
264
269
  if (!L)
265
270
  return h;
266
271
  if (!l.current) {
267
- const P = I?.locale;
268
- l.current = (W) => new Intl.NumberFormat(P, {
272
+ const W = I?.locale;
273
+ l.current = (P) => new Intl.NumberFormat(W, {
269
274
  style: "percent",
270
275
  minimumFractionDigits: 1,
271
276
  maximumFractionDigits: 1
272
- }).format(W / 100);
277
+ }).format(P / 100);
273
278
  }
274
279
  return {
275
280
  ...h,
@@ -284,18 +289,18 @@ function on(n) {
284
289
  } : h;
285
290
  }
286
291
  }), () => {
287
- const T = g.getWidget(t);
288
- T?.isRelative && "originalFormatter" in T && g.setWidget(t, {
289
- formatter: T.originalFormatter,
290
- max: T.originalMax
292
+ const y = g.getWidget(t);
293
+ y?.isRelative && "originalFormatter" in y && g.setWidget(t, {
294
+ formatter: y.originalFormatter,
295
+ max: y.originalMax
291
296
  }), l.current = void 0, g.unregisterTool(t, Ie);
292
- }), e[15] = t, e[16] = y, e[17] = O) : O = e[17];
297
+ }), e[15] = t, e[16] = T, e[17] = O) : O = e[17];
293
298
  let C;
294
- e[18] !== o || e[19] !== t || e[20] !== y ? (C = [t, y, o], e[18] = o, e[19] = t, e[20] = y, e[21] = C) : C = e[21], $(O, C);
299
+ e[18] !== o || e[19] !== t || e[20] !== T ? (C = [t, T, o], e[18] = o, e[19] = t, e[20] = T, e[21] = C) : C = e[21], $(O, C);
295
300
  let k;
296
301
  e[22] !== t || e[23] !== s ? (k = () => {
297
- const T = !s;
298
- if (l.current = void 0, T) {
302
+ const y = !s;
303
+ if (l.current = void 0, y) {
299
304
  const h = g.getWidget(t);
300
305
  g.setWidget(t, {
301
306
  isRelative: !0,
@@ -341,7 +346,7 @@ function ln(n) {
341
346
  defaultZoomEnd: m,
342
347
  labels: S,
343
348
  Icon: _,
344
- ResetIcon: y,
349
+ ResetIcon: T,
345
350
  IconButtonProps: o
346
351
  } = n, l = f === void 0 ? !1 : f, r = p === void 0 ? 0 : p, s = m === void 0 ? 100 : m, a = Fe();
347
352
  let u;
@@ -418,16 +423,16 @@ function ln(n) {
418
423
  }, e[28] = t, e[29] = E) : E = e[29];
419
424
  let z;
420
425
  e[30] !== t || e[31] !== d || e[32] !== c ? (z = [t, c, d], e[30] = t, e[31] = d, e[32] = c, e[33] = z) : z = e[33], $(E, z);
421
- let T;
422
- e[34] !== t || e[35] !== i || e[36] !== d || e[37] !== c ? (T = () => {
426
+ let y;
427
+ e[34] !== t || e[35] !== i || e[36] !== d || e[37] !== c ? (y = () => {
423
428
  const R = !i;
424
429
  g.setWidget(t, {
425
430
  zoom: R,
426
431
  zoomStart: R ? c : 0,
427
432
  zoomEnd: R ? d : 100
428
433
  });
429
- }, e[34] = t, e[35] = i, e[36] = d, e[37] = c, e[38] = T) : T = e[38];
430
- const h = T;
434
+ }, e[34] = t, e[35] = i, e[36] = d, e[37] = c, e[38] = y) : y = e[38];
435
+ const h = y;
431
436
  let I;
432
437
  e[39] !== s || e[40] !== r || e[41] !== t ? (I = () => {
433
438
  g.setWidget(t, {
@@ -436,7 +441,7 @@ function ln(n) {
436
441
  zoomEnd: s
437
442
  });
438
443
  }, e[39] = s, e[40] = r, e[41] = t, e[42] = I) : I = e[42];
439
- const L = I, P = S?.enable ?? "Enable zoom", W = S?.disable ?? "Disable zoom", B = S?.reset ?? "Reset zoom", H = i ? W : P, Z = S?.ariaLabel ?? H;
444
+ const L = I, W = S?.enable ?? "Enable zoom", P = S?.disable ?? "Disable zoom", B = S?.reset ?? "Reset zoom", H = i ? P : W, Z = S?.ariaLabel ?? H;
440
445
  let F;
441
446
  e[43] !== _ ? (F = _ ?? /* @__PURE__ */ b(Ue, {}), e[43] = _, e[44] = F) : F = e[44];
442
447
  let G;
@@ -444,7 +449,7 @@ function ln(n) {
444
449
  let V;
445
450
  e[51] !== G || e[52] !== H ? (V = /* @__PURE__ */ b(ee, { title: H, children: G }), e[51] = G, e[52] = H, e[53] = V) : V = e[53];
446
451
  let M;
447
- e[54] !== o || e[55] !== y || e[56] !== L || e[57] !== B || e[58] !== i ? (M = i && /* @__PURE__ */ b(ee, { title: B, children: /* @__PURE__ */ b(K, { size: "small", "aria-label": B, onClick: L, ...o, children: y ?? /* @__PURE__ */ b(je, {}) }) }), e[54] = o, e[55] = y, e[56] = L, e[57] = B, e[58] = i, e[59] = M) : M = e[59];
452
+ e[54] !== o || e[55] !== T || e[56] !== L || e[57] !== B || e[58] !== i ? (M = i && /* @__PURE__ */ b(ee, { title: B, children: /* @__PURE__ */ b(K, { size: "small", "aria-label": B, onClick: L, ...o, children: T ?? /* @__PURE__ */ b(je, {}) }) }), e[54] = o, e[55] = T, e[56] = L, e[57] = B, e[58] = i, e[59] = M) : M = e[59];
448
453
  let J;
449
454
  return e[60] !== V || e[61] !== M ? (J = /* @__PURE__ */ ne(ke, { sx: ye.container, children: [
450
455
  V,
@@ -464,34 +469,34 @@ function rn(n) {
464
469
  Icon: m,
465
470
  IconButtonProps: S
466
471
  } = n, _ = f === void 0 ? !1 : f, {
467
- storeIsStacked: y,
472
+ storeIsStacked: T,
468
473
  option: o
469
474
  } = Q(t, Tt);
470
475
  let l;
471
476
  e: {
472
477
  if (!o) {
473
- let W;
474
- e[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (W = {
478
+ let P;
479
+ e[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (P = {
475
480
  hasMultiSeries: !1,
476
481
  hasStackInSeries: !1
477
- }, e[0] = W) : W = e[0], l = W;
482
+ }, e[0] = P) : P = e[0], l = P;
478
483
  break e;
479
484
  }
480
- let T;
481
- e[1] !== o.series ? (T = Array.isArray(o.series) ? o.series : [o.series], e[1] = o.series, e[2] = T) : T = e[2];
482
- const h = T, I = h.length > 1;
485
+ let y;
486
+ e[1] !== o.series ? (y = Array.isArray(o.series) ? o.series : [o.series], e[1] = o.series, e[2] = y) : y = e[2];
487
+ const h = y, I = h.length > 1;
483
488
  let L;
484
489
  e[3] !== h ? (L = h.some(yt), e[3] = h, e[4] = L) : L = e[4];
485
- let P;
486
- e[5] !== I || e[6] !== L ? (P = {
490
+ let W;
491
+ e[5] !== I || e[6] !== L ? (W = {
487
492
  hasMultiSeries: I,
488
493
  hasStackInSeries: L
489
- }, e[5] = I, e[6] = L, e[7] = P) : P = e[7], l = P;
494
+ }, e[5] = I, e[6] = L, e[7] = W) : W = e[7], l = W;
490
495
  }
491
496
  const {
492
497
  hasMultiSeries: r,
493
498
  hasStackInSeries: s
494
- } = l, a = s || _, u = y ?? a;
499
+ } = l, a = s || _, u = T ?? a;
495
500
  let i, c;
496
501
  e[8] !== t ? (i = () => (g.registerTool(t, {
497
502
  id: ue,
@@ -505,11 +510,11 @@ function rn(n) {
505
510
  g.setToolEnabled(t, ue, u && r);
506
511
  }, v = [t, u, r], e[11] = r, e[12] = t, e[13] = u, e[14] = d, e[15] = v) : (d = e[14], v = e[15]), $(d, v);
507
512
  let O, C;
508
- e[16] !== a || e[17] !== t || e[18] !== y ? (O = () => {
509
- y === void 0 && g.setWidget(t, {
513
+ e[16] !== a || e[17] !== t || e[18] !== T ? (O = () => {
514
+ T === void 0 && g.setWidget(t, {
510
515
  isStacked: a
511
516
  });
512
- }, C = [a, t, y], e[16] = a, e[17] = t, e[18] = y, e[19] = O, e[20] = C) : (O = e[19], C = e[20]), $(O, C);
517
+ }, C = [a, t, T], e[16] = a, e[17] = t, e[18] = T, e[19] = O, e[20] = C) : (O = e[19], C = e[20]), $(O, C);
513
518
  let k;
514
519
  e[21] !== t || e[22] !== u ? (k = () => {
515
520
  g.setWidget(t, {
@@ -565,19 +570,19 @@ function sn(n) {
565
570
  labels: m,
566
571
  Icon: S,
567
572
  IconButtonProps: _
568
- } = n, y = p === void 0 ? 30 : p, {
573
+ } = n, T = p === void 0 ? 30 : p, {
569
574
  storeIsLocked: o
570
575
  } = Q(t, _t), l = o ?? !1;
571
576
  let r, s;
572
- e[0] !== t || e[1] !== y ? (r = () => (g.registerTool(t, {
577
+ e[0] !== t || e[1] !== T ? (r = () => (g.registerTool(t, {
573
578
  id: ie,
574
- order: y,
579
+ order: T,
575
580
  enabled: !1,
576
581
  fn: (A) => {
577
582
  const D = g.getWidget(t)?.lockedItems ?? [];
578
583
  return D.length === 0 ? A : xt(A, D);
579
584
  }
580
- }), () => g.unregisterTool(t, ie)), s = [t, y], e[0] = t, e[1] = y, e[2] = r, e[3] = s) : (r = e[2], s = e[3]), $(r, s);
585
+ }), () => g.unregisterTool(t, ie)), s = [t, T], e[0] = t, e[1] = T, e[2] = r, e[3] = s) : (r = e[2], s = e[3]), $(r, s);
581
586
  let a, u;
582
587
  e[4] !== t || e[5] !== l || e[6] !== f.length ? (a = () => {
583
588
  if (l && f.length === 0) {
@@ -630,8 +635,8 @@ function an(n) {
630
635
  labels: m,
631
636
  TextFieldProps: S,
632
637
  ClearIcon: _,
633
- debounceDelay: y
634
- } = n, o = p === void 0 ? 20 : p, l = y === void 0 ? Et : y, r = le(null), s = le(null), {
638
+ debounceDelay: T
639
+ } = n, o = p === void 0 ? 20 : p, l = T === void 0 ? Et : T, r = le(null), s = le(null), {
635
640
  enabled: a,
636
641
  searchText: u
637
642
  } = Q(t, Ct), i = le(a), c = f ?? kt;
@@ -668,10 +673,10 @@ function an(n) {
668
673
  e[14] !== a ? (E = () => {
669
674
  a && !i.current && r.current && r.current.focus(), i.current = a;
670
675
  }, x = [a], e[14] = a, e[15] = x, e[16] = E) : (x = e[15], E = e[16]), $(E, x);
671
- let z, T;
676
+ let z, y;
672
677
  e[17] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (z = () => () => {
673
678
  s.current && clearTimeout(s.current);
674
- }, T = [], e[17] = z, e[18] = T) : (z = e[17], T = e[18]), $(z, T);
679
+ }, y = [], e[17] = z, e[18] = y) : (z = e[17], y = e[18]), $(z, y);
675
680
  let h;
676
681
  e[19] !== D || e[20] !== v ? (h = (V) => {
677
682
  const M = V.target.value;
@@ -682,21 +687,21 @@ function an(n) {
682
687
  e[22] !== t || e[23] !== v ? (L = () => {
683
688
  v(""), g.triggerToolPipeline(t), r.current && r.current.focus();
684
689
  }, e[22] = t, e[23] = v, e[24] = L) : L = e[24];
685
- const P = L;
690
+ const W = L;
686
691
  if (!a)
687
692
  return null;
688
- const W = m?.placeholder ?? "Search...", B = m?.clearAriaLabel ?? "Clear search";
693
+ const P = m?.placeholder ?? "Search...", B = m?.clearAriaLabel ?? "Clear search";
689
694
  let H;
690
695
  e[25] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (H = /* @__PURE__ */ b(be, { position: "start", children: /* @__PURE__ */ b(Le, {}) }), e[25] = H) : H = e[25];
691
696
  let Z;
692
- e[26] !== _ || e[27] !== B || e[28] !== P || e[29] !== u ? (Z = u ? /* @__PURE__ */ b(be, { position: "end", children: /* @__PURE__ */ b(K, { size: "small", "aria-label": B, onClick: P, edge: "end", children: _ ?? /* @__PURE__ */ b(Ye, { fontSize: "small" }) }) }) : null, e[26] = _, e[27] = B, e[28] = P, e[29] = u, e[30] = Z) : Z = e[30];
697
+ e[26] !== _ || e[27] !== B || e[28] !== W || e[29] !== u ? (Z = u ? /* @__PURE__ */ b(be, { position: "end", children: /* @__PURE__ */ b(K, { size: "small", "aria-label": B, onClick: W, edge: "end", children: _ ?? /* @__PURE__ */ b(Ye, { fontSize: "small" }) }) }) : null, e[26] = _, e[27] = B, e[28] = W, e[29] = u, e[30] = Z) : Z = e[30];
693
698
  let F;
694
699
  e[31] !== Z ? (F = {
695
700
  startAdornment: H,
696
701
  endAdornment: Z
697
702
  }, e[31] = Z, e[32] = F) : F = e[32];
698
703
  let G;
699
- return e[33] !== S || e[34] !== I || e[35] !== W || e[36] !== u || e[37] !== F ? (G = /* @__PURE__ */ b(Me, { inputRef: r, size: "small", fullWidth: !0, variant: "filled", placeholder: W, value: u, onChange: I, InputProps: F, ...S }), e[33] = S, e[34] = I, e[35] = W, e[36] = u, e[37] = F, e[38] = G) : G = e[38], G;
704
+ return e[33] !== S || e[34] !== I || e[35] !== P || e[36] !== u || e[37] !== F ? (G = /* @__PURE__ */ b(Me, { inputRef: r, size: "small", fullWidth: !0, variant: "filled", placeholder: P, value: u, onChange: I, InputProps: F, ...S }), e[33] = S, e[34] = I, e[35] = P, e[36] = u, e[37] = F, e[38] = G) : G = e[38], G;
700
705
  }
701
706
  function Ct(n) {
702
707
  return {
@@ -717,8 +722,8 @@ function cn(n) {
717
722
  Icon: m,
718
723
  IconButtonProps: S
719
724
  } = n, _ = f === void 0 ? !1 : f, {
720
- storeIsEnabled: y
721
- } = Q(t, Lt), o = y ?? _;
725
+ storeIsEnabled: T
726
+ } = Q(t, Lt), o = T ?? _;
722
727
  let l, r;
723
728
  e[0] !== _ || e[1] !== t ? (l = () => {
724
729
  g.getWidget(t)?.isSearchEnabled === void 0 && g.setWidget(t, {
@@ -762,7 +767,7 @@ function zt(n) {
762
767
  listeners: m,
763
768
  setNodeRef: S,
764
769
  transform: _,
765
- transition: y,
770
+ transition: T,
766
771
  isDragging: o
767
772
  } = rt(f);
768
773
  let l;
@@ -772,12 +777,12 @@ function zt(n) {
772
777
  } : null), e[2] = _, e[3] = l) : l = e[3];
773
778
  const r = o ? 0.5 : 1, s = o ? "grabbing" : "grab";
774
779
  let a;
775
- e[4] !== l || e[5] !== r || e[6] !== s || e[7] !== y ? (a = {
780
+ e[4] !== l || e[5] !== r || e[6] !== s || e[7] !== T ? (a = {
776
781
  transform: l,
777
- transition: y,
782
+ transition: T,
778
783
  opacity: r,
779
784
  cursor: s
780
- }, e[4] = l, e[5] = r, e[6] = s, e[7] = y, e[8] = a) : a = e[8];
785
+ }, e[4] = l, e[5] = r, e[6] = s, e[7] = T, e[8] = a) : a = e[8];
781
786
  const u = a;
782
787
  let i;
783
788
  e[9] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (i = {
@@ -802,9 +807,9 @@ function dn(n) {
802
807
  Icon: p,
803
808
  IconButtonProps: m,
804
809
  MenuProps: S
805
- } = n, [_, y] = ge(null), {
810
+ } = n, [_, T] = ge(null), {
806
811
  columns: o
807
- } = Q(t, Wt);
812
+ } = Q(t, Pt);
808
813
  let l;
809
814
  e[0] !== t ? (l = (M) => {
810
815
  const R = g.getWidget(t)?.columns;
@@ -813,7 +818,7 @@ function dn(n) {
813
818
  const j = M, N = j.columns;
814
819
  if (!N || N.length === 0 || N.length === R.length && N.every((q, X) => q.id === R[X]?.id))
815
820
  return M;
816
- const oe = new Map(N.map(Pt)), te = [];
821
+ const oe = new Map(N.map(Wt)), te = [];
817
822
  for (const q of R) {
818
823
  const X = oe.get(q.id);
819
824
  X && (te.push(X), oe.delete(q.id));
@@ -845,12 +850,12 @@ function dn(n) {
845
850
  }), () => g.unregisterTool(t, Te)), d = [t, r], e[5] = t, e[6] = r, e[7] = c, e[8] = d) : (c = e[7], d = e[8]), $(c, d);
846
851
  let v;
847
852
  e[9] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (v = (M) => {
848
- M.stopPropagation(), y(M.currentTarget);
853
+ M.stopPropagation(), T(M.currentTarget);
849
854
  }, e[9] = v) : v = e[9];
850
855
  const O = v;
851
856
  let C;
852
857
  e[10] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (C = () => {
853
- y(null);
858
+ T(null);
854
859
  }, e[10] = C) : C = e[10];
855
860
  const k = C;
856
861
  let A;
@@ -872,18 +877,18 @@ function dn(n) {
872
877
  const w = A;
873
878
  if (!o || o.length < 2)
874
879
  return null;
875
- const D = f?.tooltip ?? "Change column", x = !!_, E = f?.ariaLabel ?? D, z = x ? "change-column-menu" : void 0, T = x ? "true" : void 0;
880
+ const D = f?.tooltip ?? "Change column", x = !!_, E = f?.ariaLabel ?? D, z = x ? "change-column-menu" : void 0, y = x ? "true" : void 0;
876
881
  let h;
877
882
  e[14] !== p ? (h = p ?? /* @__PURE__ */ b(Ge, { children: /* @__PURE__ */ b(Ot, {}) }), e[14] = p, e[15] = h) : h = e[15];
878
883
  let I;
879
- e[16] !== m || e[17] !== x || e[18] !== z || e[19] !== T || e[20] !== h || e[21] !== E ? (I = /* @__PURE__ */ b(K, { size: "small", "aria-label": E, "aria-controls": z, "aria-haspopup": "true", "aria-expanded": T, onClick: O, "data-active": x, sx: re.trigger, ...m, children: h }), e[16] = m, e[17] = x, e[18] = z, e[19] = T, e[20] = h, e[21] = E, e[22] = I) : I = e[22];
884
+ e[16] !== m || e[17] !== x || e[18] !== z || e[19] !== y || e[20] !== h || e[21] !== E ? (I = /* @__PURE__ */ b(K, { size: "small", "aria-label": E, "aria-controls": z, "aria-haspopup": "true", "aria-expanded": y, onClick: O, "data-active": x, sx: re.trigger, ...m, children: h }), e[16] = m, e[17] = x, e[18] = z, e[19] = y, e[20] = h, e[21] = E, e[22] = I) : I = e[22];
880
885
  let L;
881
886
  e[23] !== I || e[24] !== D ? (L = /* @__PURE__ */ b(ee, { title: D, children: I }), e[23] = I, e[24] = D, e[25] = L) : L = e[25];
882
- let P, W, B;
883
- e[26] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (P = {
887
+ let W, P, B;
888
+ e[26] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (W = {
884
889
  vertical: "bottom",
885
890
  horizontal: "right"
886
- }, W = {
891
+ }, P = {
887
892
  vertical: "top",
888
893
  horizontal: "right"
889
894
  }, B = {
@@ -892,13 +897,13 @@ function dn(n) {
892
897
  overflow: "hidden"
893
898
  }
894
899
  }
895
- }, e[26] = P, e[27] = W, e[28] = B) : (P = e[26], W = e[27], B = e[28]);
900
+ }, e[26] = W, e[27] = P, e[28] = B) : (W = e[26], P = e[27], B = e[28]);
896
901
  let H;
897
902
  e[29] !== o ? (H = o.map(wt), e[29] = o, e[30] = H) : H = e[30];
898
903
  let Z;
899
904
  e[31] !== i || e[32] !== H ? (Z = /* @__PURE__ */ b(at, { items: i, strategy: ct, children: H }), e[31] = i, e[32] = H, e[33] = Z) : Z = e[33];
900
905
  let F;
901
- e[34] !== S || e[35] !== _ || e[36] !== x || e[37] !== Z ? (F = /* @__PURE__ */ b(Ce, { id: "change-column-menu", anchorEl: _, open: x, onClose: k, anchorOrigin: P, transformOrigin: W, slotProps: B, ...S, children: Z }), e[34] = S, e[35] = _, e[36] = x, e[37] = Z, e[38] = F) : F = e[38];
906
+ e[34] !== S || e[35] !== _ || e[36] !== x || e[37] !== Z ? (F = /* @__PURE__ */ b(Ce, { id: "change-column-menu", anchorEl: _, open: x, onClose: k, anchorOrigin: W, transformOrigin: P, slotProps: B, ...S, children: Z }), e[34] = S, e[35] = _, e[36] = x, e[37] = Z, e[38] = F) : F = e[38];
902
907
  let G;
903
908
  e[39] !== w || e[40] !== a || e[41] !== F ? (G = /* @__PURE__ */ b(ot, { sensors: a, collisionDetection: lt, onDragEnd: w, children: F }), e[39] = w, e[40] = a, e[41] = F, e[42] = G) : G = e[42];
904
909
  let V;
@@ -913,10 +918,10 @@ function wt(n) {
913
918
  function At(n) {
914
919
  return n.id;
915
920
  }
916
- function Pt(n) {
921
+ function Wt(n) {
917
922
  return [n.id, n];
918
923
  }
919
- function Wt(n) {
924
+ function Pt(n) {
920
925
  return {
921
926
  columns: n?.columns
922
927
  };
@@ -948,7 +953,7 @@ function un(n) {
948
953
  dataIndex: [],
949
954
  seriesIndex: 0
950
955
  }, e[0] = _) : _ = e[0];
951
- const y = le(_), {
956
+ const T = le(_), {
952
957
  brush: o
953
958
  } = Q(t, $t);
954
959
  let l;
@@ -988,22 +993,22 @@ function un(n) {
988
993
  e[9] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (u = (h) => {
989
994
  const L = h.batch?.flatMap(Rt) ?? [];
990
995
  if (!L.length) {
991
- y.current = {
996
+ T.current = {
992
997
  dataIndex: [],
993
998
  seriesIndex: 0
994
999
  };
995
1000
  return;
996
1001
  }
997
- const P = L[0]?.seriesIndex ?? 0, W = Array.from(new Set(L.filter((B) => B.seriesIndex === void 0 || B.seriesIndex === P).flatMap(Bt)));
998
- y.current = {
999
- dataIndex: W,
1000
- seriesIndex: P
1002
+ const W = L[0]?.seriesIndex ?? 0, P = Array.from(new Set(L.filter((B) => B.seriesIndex === void 0 || B.seriesIndex === W).flatMap(Bt)));
1003
+ T.current = {
1004
+ dataIndex: P,
1005
+ seriesIndex: W
1001
1006
  };
1002
1007
  }, e[9] = u) : u = e[9];
1003
1008
  const i = u;
1004
1009
  let c;
1005
1010
  e[10] !== t || e[11] !== f ? (c = () => {
1006
- f?.(y.current), g.setWidget(t, {
1011
+ f?.(T.current), g.setWidget(t, {
1007
1012
  brush: !1
1008
1013
  });
1009
1014
  }, e[10] = t, e[11] = f, e[12] = c) : c = e[12];
@@ -1015,8 +1020,8 @@ function un(n) {
1015
1020
  order: 25,
1016
1021
  enabled: !1,
1017
1022
  fn: (h) => {
1018
- const I = h, L = I.option, P = I.onEvents ?? {}, W = pe(), B = {
1019
- ...P,
1023
+ const I = h, L = I.option, W = I.onEvents ?? {}, P = pe(), B = {
1024
+ ...W,
1020
1025
  brushSelected: i,
1021
1026
  brushEnd: d
1022
1027
  };
@@ -1024,7 +1029,7 @@ function un(n) {
1024
1029
  ...I,
1025
1030
  option: {
1026
1031
  ...L,
1027
- ...W
1032
+ ...P
1028
1033
  },
1029
1034
  onEvents: B
1030
1035
  };
@@ -1039,8 +1044,8 @@ function un(n) {
1039
1044
  e[21] !== m ? (E = m ?? /* @__PURE__ */ b(qe, {}), e[21] = m, e[22] = E) : E = e[22];
1040
1045
  let z;
1041
1046
  e[23] !== S || e[24] !== o || e[25] !== r || e[26] !== x || e[27] !== E ? (z = /* @__PURE__ */ b(K, { size: "small", "aria-label": x, onClick: r, sx: _e.trigger, "data-active": o, ...S, children: E }), e[23] = S, e[24] = o, e[25] = r, e[26] = x, e[27] = E, e[28] = z) : z = e[28];
1042
- let T;
1043
- return e[29] !== z || e[30] !== D ? (T = /* @__PURE__ */ b(ke, { sx: _e.container, children: /* @__PURE__ */ b(ee, { title: D, children: z }) }), e[29] = z, e[30] = D, e[31] = T) : T = e[31], T;
1047
+ let y;
1048
+ return e[29] !== z || e[30] !== D ? (y = /* @__PURE__ */ b(ke, { sx: _e.container, children: /* @__PURE__ */ b(ee, { title: D, children: z }) }), e[29] = z, e[30] = D, e[31] = y) : y = e[31], y;
1044
1049
  }
1045
1050
  function Bt(n) {
1046
1051
  return n.dataIndex ?? [];
@@ -1 +1 @@
1
- {"version":3,"file":"actions.js","sources":["../../src/widgets/actions/fullscreen/styles.ts","../../src/widgets/actions/fullscreen/fullscreen.tsx","../../src/widgets/actions/download/download.tsx","../../src/widgets/actions/shared/styles.ts","../../src/widgets/actions/relative-data/utils.ts","../../src/widgets/actions/relative-data/relative-data.tsx","../../src/widgets/actions/zoom-toggle/style.ts","../../src/widgets/actions/zoom-toggle/zoom-toggle.tsx","../../src/widgets/actions/stack-toggle/grouped-bar-chart-icon.tsx","../../src/widgets/actions/stack-toggle/stack-toggle.tsx","../../src/widgets/actions/lock-selection/lock-selection.tsx","../../src/widgets/actions/searcher/searcher.tsx","../../src/widgets/actions/searcher/searcher-toggle.tsx","../../src/widgets/actions/change-column/change-column-icon.tsx","../../src/widgets/actions/change-column/sortable-column-item.tsx","../../src/widgets/actions/change-column/change-column.tsx","../../src/widgets/actions/brush-toggle/style.ts","../../src/widgets/actions/brush-toggle/brush-toggle.tsx"],"sourcesContent":["import type { SxProps, Theme } from '@mui/material'\n\nexport const styles = {\n title: {\n container: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: 1,\n },\n },\n content: {\n display: 'flex',\n flexDirection: 'column',\n gap: ({ spacing }) => spacing(1),\n },\n} satisfies Record<string, SxProps<Theme>>\n","import {\n Dialog,\n DialogContent,\n DialogTitle,\n IconButton,\n Typography,\n} from '@mui/material'\nimport { widgetStoreActions } from '../../stores/widget-store'\nimport { useWidgetSelector } from '../../stores/use-widget-selector'\nimport { Close, FullscreenOutlined } from '@mui/icons-material'\nimport type {\n FullScreenConfig,\n FullScreenProps,\n FullScreenState,\n} from './types'\nimport { styles } from './styles'\n\nconst EMPTY_DIALOG_CONTENT_PROPS: NonNullable<\n FullScreenProps['DialogContentProps']\n> = {}\n\n/**\n * Displays widget content in a fullscreen modal dialog.\n *\n * Manages fullscreen state via the widget store and renders a MUI Dialog\n * with the widget title and a close button.\n *\n * @example\n * ```tsx\n * <FullScreen id=\"my-widget\" labels={{ ariaLabel: 'Expand chart' }}>\n * <ChartContent id=\"my-widget\" />\n * </FullScreen>\n * ```\n */\nexport function FullScreen({\n id,\n labels,\n children,\n Icon,\n IconButtonProps,\n DialogContentProps: {\n sx,\n ...DialogContentProps\n } = EMPTY_DIALOG_CONTENT_PROPS,\n DialogProps,\n}: FullScreenProps) {\n const { isFullScreen, title } = useWidgetSelector(id, (w) => ({\n isFullScreen: (w as FullScreenState | undefined)?.isFullScreen,\n title: (w as FullScreenState | undefined)?.title,\n }))\n const updateFullScreenConfig = (updates: Partial<FullScreenConfig>) => {\n widgetStoreActions.setWidget<FullScreenState>(id, {\n isFullScreen: updates.isFullScreen,\n })\n }\n\n return (\n <>\n <IconButton\n {...IconButtonProps}\n onClick={() => updateFullScreenConfig({ isFullScreen: true })}\n >\n {Icon ?? <FullscreenOutlined />}\n </IconButton>\n <Dialog\n maxWidth={false}\n open={!!isFullScreen}\n keepMounted\n aria-labelledby={labels?.ariaLabel ?? `fullscreen-dialog-title-${id}`}\n {...DialogProps}\n onClose={() => updateFullScreenConfig({ isFullScreen: false })}\n >\n <DialogTitle\n id={`fullscreen-dialog-title-${id}`}\n sx={styles.title.container}\n >\n <Typography variant='subtitle1' component='span'>\n {title}\n </Typography>\n <IconButton\n onClick={() => updateFullScreenConfig({ isFullScreen: false })}\n >\n <Close />\n </IconButton>\n </DialogTitle>\n <DialogContent\n sx={{\n ...styles.content,\n ...sx,\n }}\n {...DialogContentProps}\n >\n {children}\n </DialogContent>\n </Dialog>\n </>\n )\n}\n","import {\n CircularProgress,\n IconButton,\n ListItemIcon,\n ListItemText,\n Menu,\n MenuItem,\n} from '@mui/material'\nimport type { DownloadItem, DownloadProps } from './types'\nimport { FileDownloadOutlined } from '@mui/icons-material'\nimport { useState, type MouseEvent } from 'react'\nimport { useWidgetSelector } from '../../stores/use-widget-selector'\n\nconst EMPTY_LABELS: NonNullable<DownloadProps['labels']> = {}\n\n/**\n * Dropdown menu action for exporting widget data in various formats (CSV, PNG, etc.).\n *\n * Reads widget data from the store and triggers downloads using the modifier\n * function defined in each `DownloadItem`.\n *\n * @example\n * ```tsx\n * <Download id={widgetId} items={barDownloadConfig({ refUI })} />\n * ```\n */\nexport function Download({\n id,\n items,\n labels = EMPTY_LABELS,\n Icon,\n IconButtonProps,\n}: DownloadProps) {\n const { data } = useWidgetSelector(id, (w) => ({\n data: w?.data,\n }))\n\n const [isDownloading, setIsDownloading] = useState(false)\n const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null)\n\n const handleToggle = (event: MouseEvent<HTMLElement>) => {\n event.stopPropagation()\n setAnchorEl(event.currentTarget)\n }\n\n const handleDownload = (data: string, option: DownloadItem) => {\n const link = document.createElement('a')\n link.href = data\n link.download = option.filename ?? id\n link.style.display = 'none'\n document.body.appendChild(link)\n link.click()\n document.body.removeChild(link)\n option.callback?.(link.href)\n }\n\n const handleClick = async (\n event: MouseEvent<HTMLElement>,\n option: DownloadItem,\n ) => {\n event.stopPropagation()\n\n setIsDownloading(true)\n setAnchorEl(null)\n\n const result = await option.modifier(data)\n\n if (!result) {\n setIsDownloading(false)\n return\n }\n\n handleDownload(result, option)\n setIsDownloading(false)\n }\n\n return (\n <>\n <IconButton\n size='small'\n aria-label={labels.ariaLabel ?? 'download options'}\n aria-controls='options-menu'\n aria-haspopup='true'\n onClick={handleToggle}\n {...IconButtonProps}\n disabled={isDownloading || items.length === 0}\n className={isDownloading || anchorEl ? 'active' : ''}\n >\n {isDownloading ? (\n <CircularProgress size={18} color='inherit' />\n ) : (\n (Icon ?? <FileDownloadOutlined />)\n )}\n </IconButton>\n <Menu\n variant='menu'\n elevation={8}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'right',\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'right',\n }}\n anchorEl={anchorEl}\n open={Boolean(anchorEl)}\n onClose={() => setAnchorEl(null)}\n MenuListProps={{\n sx: {\n paddingBottom: 0,\n },\n }}\n >\n {items.map((option) => (\n <MenuItem\n key={option.id}\n disabled={option.disabled}\n onClick={(e) => void handleClick(e, option)}\n >\n {option.icon && (\n <ListItemIcon sx={{ color: 'text.primary' }}>\n {option.icon}\n </ListItemIcon>\n )}\n <ListItemText>{option.label}</ListItemText>\n </MenuItem>\n ))}\n </Menu>\n </>\n )\n}\n","import type { SxProps, Theme } from '@mui/material'\n\n/**\n * Shared styles for widget action buttons\n */\nexport const actionButtonStyles = {\n trigger: {\n '&[data-active=\"true\"]': {\n background: (theme: Theme) => theme.palette.primary.relatedLight,\n },\n },\n} satisfies Record<string, SxProps<Theme>>\n","import type { EchartWidgetData } from '../../echart/types'\n\n/**\n * Calculates the sum of all numeric values in the data\n */\nexport function calculateTotal(data: EchartWidgetData): number {\n return data.reduce((total, series) => {\n return series.reduce((seriesTotal, item) => {\n if (Array.isArray(item)) {\n const value = item.at(-1) as number\n return typeof value === 'number' ? seriesTotal + value : seriesTotal\n }\n\n return Object.entries(item).reduce((itemTotal: number, [key, value]) => {\n if (key === 'name') {\n return itemTotal\n }\n return typeof value === 'number' ? itemTotal + value : itemTotal\n }, seriesTotal)\n }, total)\n }, 0)\n}\n\n/**\n * Transforms data to relative (percentage) values\n */\nexport function toRelativeData(\n data: EchartWidgetData,\n total: number,\n): EchartWidgetData {\n if (total === 0) return data\n\n return data.map((series) =>\n series.map((item) => {\n if (Array.isArray(item)) {\n return item.map((value: number, index) => {\n if (index === item.length - 1 && typeof value === 'number') {\n return (value / total) * 100\n }\n return value\n }) as typeof item\n }\n\n const transformed: Record<string, string | number> = {}\n\n for (const [key, value] of Object.entries(item)) {\n if (key === 'name') {\n transformed[key] = value\n continue\n }\n transformed[key] =\n typeof value === 'number' ? (value / total) * 100 : value\n }\n\n return transformed\n }),\n )\n}\n","import { IconButton } from '@mui/material'\nimport { PercentOutlined } from '@mui/icons-material'\nimport { useCallback, useEffect, useRef } from 'react'\nimport { widgetStoreActions } from '../../stores/widget-store'\nimport { useWidgetSelector } from '../../stores/use-widget-selector'\nimport type { RelativeDataProps, RelativeDataState } from './types'\nimport { actionButtonStyles } from '../shared/styles'\nimport { Tooltip } from '../../../components'\nimport { calculateTotal, toRelativeData } from './utils'\nimport type { EchartWidgetData } from '../../../widgets/echart'\n\nexport const RELATIVE_DATA_TOOL_ID = 'relative-data'\nexport const RELATIVE_DATA_CONFIG_TOOL_ID = 'relative-data-config'\n\n/**\n * Widget action to toggle between relative (percentage) and absolute data display.\n *\n * Registers two transformation tools in the widget pipeline when mounted:\n * - A data tool that converts values to percentages (enabled/disabled via store)\n * - A config tool that is **always enabled** and reads `isRelative` from the store\n * to decide whether to apply the percentage formatter or restore the original one.\n * The config tool must always participate because the original formatter may have\n * been set via `setWidget` (not in the base config), so disabling the tool would\n * leave the percentage formatter stuck on the widget.\n *\n * @example\n * ```tsx\n * <RelativeData\n * id=\"my-widget\"\n * order={20}\n * defaultIsRelative={false}\n * />\n * ```\n */\nexport function RelativeData({\n id,\n order = 10,\n defaultIsRelative = false,\n labels,\n Icon,\n IconButtonProps,\n}: RelativeDataProps) {\n const percentFormatterRef = useRef<((value: number) => string) | undefined>(\n undefined,\n )\n\n // Read isRelative from widget store root — single source of truth\n const { isRelative } = useWidgetSelector(id, (w) => ({\n isRelative:\n (w as RelativeDataState | undefined)?.isRelative ?? defaultIsRelative,\n }))\n\n // Initialize store with default value on mount\n useEffect(() => {\n const current = widgetStoreActions.getWidget<RelativeDataState>(id)\n if (current?.isRelative === undefined) {\n widgetStoreActions.setWidget(id, { isRelative: defaultIsRelative })\n }\n }, [id, defaultIsRelative])\n\n // Register data tool once — fn has no closure deps\n useEffect(() => {\n widgetStoreActions.registerTool(id, {\n id: RELATIVE_DATA_TOOL_ID,\n order,\n enabled: defaultIsRelative,\n fn: (data) => {\n const echartData = data as EchartWidgetData\n const total = calculateTotal(echartData)\n return toRelativeData(echartData, total)\n },\n })\n\n return () => widgetStoreActions.unregisterTool(id, RELATIVE_DATA_TOOL_ID)\n }, [id, order, defaultIsRelative])\n\n // Sync data tool enabled — lightweight, no re-registration\n useEffect(() => {\n widgetStoreActions.setToolEnabled(id, RELATIVE_DATA_TOOL_ID, isRelative)\n }, [id, isRelative])\n\n // Register config tool — ALWAYS enabled.\n // Reads isRelative, originalFormatter, originalMax from the store at execution time:\n // - isRelative=true → applies percentage formatter and max=100\n // - isRelative=false → restores original formatter/max from store\n useEffect(() => {\n widgetStoreActions.registerTool(id, {\n id: RELATIVE_DATA_CONFIG_TOOL_ID,\n type: 'config',\n order,\n enabled: true,\n fn: (currentConfig: unknown) => {\n const config = currentConfig as Record<string, unknown>\n const widget = widgetStoreActions.getWidget<RelativeDataState>(id)\n\n const hasSourceData =\n widget?.sourceData != null &&\n !(Array.isArray(widget.sourceData) && widget.sourceData.length === 0)\n\n if (widget?.isRelative) {\n // Don't apply percentage formatter when there's no source data\n if (!hasSourceData) return config\n\n if (!percentFormatterRef.current) {\n const locale = widget?.locale\n percentFormatterRef.current = (value: number) =>\n new Intl.NumberFormat(locale, {\n style: 'percent',\n minimumFractionDigits: 1,\n maximumFractionDigits: 1,\n }).format(value / 100)\n }\n return { ...config, formatter: percentFormatterRef.current, max: 100 }\n }\n\n // Not in relative mode — restore originals from store if captured.\n // Use `in` because originalFormatter may have been captured as undefined\n // (widget had no formatter before toggling relative on).\n percentFormatterRef.current = undefined\n if (widget != null && 'originalFormatter' in widget) {\n return {\n ...config,\n formatter: widget.originalFormatter,\n max: widget.originalMax,\n }\n }\n return config\n },\n })\n return () => {\n // Restore original formatter/max if unmounting while in relative mode\n const widget = widgetStoreActions.getWidget<RelativeDataState>(id)\n if (widget?.isRelative && 'originalFormatter' in widget) {\n widgetStoreActions.setWidget(id, {\n formatter: widget.originalFormatter,\n max: widget.originalMax,\n })\n }\n percentFormatterRef.current = undefined\n widgetStoreActions.unregisterTool(id, RELATIVE_DATA_CONFIG_TOOL_ID)\n }\n }, [id, order, defaultIsRelative])\n\n const handleToggle = useCallback(() => {\n const newIsRelative = !isRelative\n percentFormatterRef.current = undefined\n\n if (newIsRelative) {\n // Capture current formatter/max in store before switching to relative\n const widget = widgetStoreActions.getWidget(id)\n widgetStoreActions.setWidget(id, {\n isRelative: true,\n originalFormatter: widget?.formatter,\n originalMax: (widget as unknown as Record<string, unknown>)?.max,\n })\n } else {\n widgetStoreActions.setWidget(id, { isRelative: false })\n }\n }, [isRelative, id])\n\n const tooltipLabel = isRelative\n ? (labels?.absolute ?? 'Show absolute values')\n : (labels?.relative ?? 'Show relative values')\n\n return (\n <Tooltip title={tooltipLabel}>\n <IconButton\n size='small'\n aria-label={labels?.ariaLabel ?? tooltipLabel}\n onClick={handleToggle}\n sx={actionButtonStyles.trigger}\n data-active={isRelative}\n {...IconButtonProps}\n >\n {Icon ?? <PercentOutlined />}\n </IconButton>\n </Tooltip>\n )\n}\n","import type { SxProps, Theme } from '@mui/material'\n\nexport const styles = {\n container: {\n display: 'flex',\n alignItems: 'center',\n gap: ({ spacing }) => spacing(0.25),\n },\n trigger: {\n '&[data-active=\"true\"]': {\n background: (theme: Theme) => theme.palette.primary.relatedLight,\n },\n },\n} satisfies Record<string, SxProps<Theme>>\n","import { Box, IconButton, useTheme } from '@mui/material'\nimport {\n SubdirectoryArrowLeftOutlined,\n ZoomInOutlined,\n} from '@mui/icons-material'\nimport { useEffect, useCallback } from 'react'\nimport { widgetStoreActions } from '../../stores/widget-store'\nimport type { ZoomToggleProps, ZoomState } from './types'\nimport { styles } from './style'\nimport { Tooltip } from '../../../components'\nimport { getEChartZoomConfig } from '../../echart/utils'\nimport type { EchartOptionsProps } from '../../echart/types'\nimport { useWidgetSelector } from '../../stores/use-widget-selector'\n\nexport const ZOOM_TOGGLE_TOOL_ID = 'zoom-toggle'\n\n/**\n * Widget action to toggle EChart zoom functionality.\n *\n * Registers as a config pipeline tool so that zoom configuration is automatically\n * re-applied when the base config is updated (e.g., by WidgetLoader).\n *\n * Zoom state (enabled, range) is stored in the widget store root, and the tool\n * derives its `enabled` flag from the store. This keeps state accessible across\n * component instances.\n *\n * When zoom is active, displays an inline reset button to disable zoom.\n * Only intended for use in fullscreen ToolbarActions for bar and histogram widgets.\n *\n * @example\n * ```tsx\n * <ZoomToggle\n * id=\"my-widget\"\n * defaultZoom={false}\n * zoomStart={0}\n * zoomEnd={100}\n * />\n * ```\n */\nexport function ZoomToggle({\n id,\n defaultZoom = false,\n defaultZoomStart = 0,\n defaultZoomEnd = 100,\n labels,\n Icon,\n ResetIcon,\n IconButtonProps,\n}: ZoomToggleProps) {\n const theme = useTheme()\n\n // Read zoom state from widget store root — single source of truth\n const { zoom, zoomStart, zoomEnd } = useWidgetSelector(id, (w) => ({\n zoom: (w as ZoomState | undefined)?.zoom ?? defaultZoom,\n zoomStart: (w as ZoomState | undefined)?.zoomStart ?? defaultZoomStart,\n zoomEnd: (w as ZoomState | undefined)?.zoomEnd ?? defaultZoomEnd,\n }))\n\n // Initialize store with default values on mount\n useEffect(() => {\n const current = widgetStoreActions.getWidget<ZoomState>(id)\n if (current?.zoom === undefined) {\n widgetStoreActions.setWidget(id, {\n zoom: defaultZoom,\n zoomStart: defaultZoomStart,\n zoomEnd: defaultZoomEnd,\n })\n }\n }, [id, defaultZoom, defaultZoomStart, defaultZoomEnd])\n\n // Handle dataZoom event — update store (source of truth)\n const handleDataZoom = useCallback(\n (event: unknown) => {\n const zoomEvent = event as {\n start?: number\n end?: number\n batch?: {\n start?: number\n end?: number\n }[]\n }\n\n const start = zoomEvent.start ?? zoomEvent.batch?.[0]?.start\n const end = zoomEvent.end ?? zoomEvent.batch?.[0]?.end\n\n if (start !== undefined && end !== undefined) {\n widgetStoreActions.setWidget(id, {\n zoom: true,\n zoomStart: start,\n zoomEnd: end,\n })\n }\n },\n [id],\n )\n\n // Register config tool once — fn reads zoom range from the store at execution time.\n useEffect(() => {\n widgetStoreActions.registerTool(id, {\n id: ZOOM_TOGGLE_TOOL_ID,\n type: 'config',\n order: 20,\n enabled: defaultZoom,\n fn: (currentConfig) => {\n const config = currentConfig as Record<string, unknown>\n const option = config.option as EchartOptionsProps | undefined\n const currentOnEvents =\n (config.onEvents as Record<string, unknown> | undefined) ?? {}\n\n const widget = widgetStoreActions.getWidget<ZoomState>(id)\n const start = widget?.zoomStart ?? 0\n const end = widget?.zoomEnd ?? 100\n\n const legend = option?.legend as { show?: boolean } | undefined\n const hasLegend = legend?.show !== false && legend !== undefined\n\n const sliderHeight = parseInt(theme?.spacing?.(4) ?? '32')\n const sliderGap = 8\n const legendBottomOffset = hasLegend ? 28 : 0\n\n const zoomConfig = getEChartZoomConfig(\n { start, end },\n {\n inside: true,\n xSlider: true,\n ySlider: false,\n bottomOffset: legendBottomOffset,\n },\n theme,\n )\n\n const grid = option?.grid as { bottom?: number | string } | undefined\n const currentGridBottom =\n typeof grid?.bottom === 'number'\n ? grid.bottom\n : parseInt(grid?.bottom ?? '24')\n\n const gridBottom = currentGridBottom + sliderHeight + sliderGap\n\n const onEvents = { ...currentOnEvents, dataZoom: handleDataZoom }\n\n return {\n ...config,\n option: {\n ...option,\n ...zoomConfig,\n grid: { ...grid, bottom: gridBottom },\n },\n onEvents,\n }\n },\n })\n return () => widgetStoreActions.unregisterTool(id, ZOOM_TOGGLE_TOOL_ID)\n }, [id, theme, handleDataZoom, defaultZoom, defaultZoomStart, defaultZoomEnd])\n\n // Sync enabled from store — lightweight, no re-registration\n useEffect(() => {\n widgetStoreActions.setToolEnabled(id, ZOOM_TOGGLE_TOOL_ID, zoom)\n }, [id, zoom])\n\n // Trigger pipeline when zoom range changes — fn reads from store at execution time,\n // but the pipeline only re-runs when registeredTools reference changes.\n // setToolEnabled handles the zoom on/off case, this handles range-only changes.\n useEffect(() => {\n widgetStoreActions.triggerToolPipeline(id)\n }, [id, zoomStart, zoomEnd])\n\n const handleToggle = () => {\n const newZoom = !zoom\n widgetStoreActions.setWidget(id, {\n zoom: newZoom,\n zoomStart: newZoom ? zoomStart : 0,\n zoomEnd: newZoom ? zoomEnd : 100,\n })\n }\n\n const handleReset = () => {\n widgetStoreActions.setWidget(id, {\n zoom: true,\n zoomStart: defaultZoomStart,\n zoomEnd: defaultZoomEnd,\n })\n }\n\n const enableLabel = labels?.enable ?? 'Enable zoom'\n const disableLabel = labels?.disable ?? 'Disable zoom'\n const resetLabel = labels?.reset ?? 'Reset zoom'\n const tooltipLabel = zoom ? disableLabel : enableLabel\n\n return (\n <Box sx={styles.container}>\n <Tooltip title={tooltipLabel}>\n <IconButton\n size='small'\n aria-label={labels?.ariaLabel ?? tooltipLabel}\n onClick={handleToggle}\n sx={styles.trigger}\n data-active={zoom}\n {...IconButtonProps}\n >\n {Icon ?? <ZoomInOutlined />}\n </IconButton>\n </Tooltip>\n {zoom && (\n <Tooltip title={resetLabel}>\n <IconButton\n size='small'\n aria-label={resetLabel}\n onClick={handleReset}\n {...IconButtonProps}\n >\n {ResetIcon ?? <SubdirectoryArrowLeftOutlined />}\n </IconButton>\n </Tooltip>\n )}\n </Box>\n )\n}\n","export const GroupedBarChartIcon = () => (\n <svg\n width='24'\n height='24'\n viewBox='0 0 24 24'\n fill='none'\n xmlns='http://www.w3.org/2000/svg'\n >\n <path\n d='M4 20V8H8V20H4ZM9 20V13H13V20H9ZM16 20V4H20V20H16Z'\n fill='currentColor'\n />\n </svg>\n)\n","import { IconButton } from '@mui/material'\nimport { useCallback, useEffect, useMemo } from 'react'\nimport { widgetStoreActions } from '../../stores/widget-store'\nimport type { StackToggleProps, StackToggleState } from './types'\nimport { actionButtonStyles } from '../shared/styles'\nimport { Tooltip } from '../../../components'\nimport { GroupedBarChartIcon } from './grouped-bar-chart-icon'\nimport { getEChartStackConfig } from '../../echart/utils'\nimport { DEFAULT_STACK_GROUP } from '../../echart/const'\nimport type { EchartWidgetState } from '../../echart/types'\nimport type { EchartOptionsProps } from '../../echart/types'\nimport { useWidgetSelector } from '../../stores/use-widget-selector'\n\nexport const STACK_TOGGLE_TOOL_ID = 'stack-toggle'\n\n/**\n * Widget action to toggle stacking behavior in ECharts bar and histogram widgets.\n *\n * Registers as a config pipeline tool so that stack configuration is automatically\n * re-applied when the base config is updated (e.g., by WidgetLoader).\n *\n * @example\n * ```tsx\n * <StackToggle\n * id=\"my-widget\"\n * defaultIsStacked={false}\n * />\n * ```\n */\nexport function StackToggle({\n id,\n defaultIsStacked = false,\n labels,\n Icon,\n IconButtonProps,\n}: StackToggleProps) {\n const { storeIsStacked, option } = useWidgetSelector(id, (w) => ({\n storeIsStacked: (w as StackToggleState | undefined)?.isStacked,\n option: (w as EchartWidgetState | undefined)?.option,\n }))\n\n const { hasMultiSeries, hasStackInSeries } = useMemo(() => {\n if (!option) return { hasMultiSeries: false, hasStackInSeries: false }\n const series = Array.isArray(option.series)\n ? option.series\n : [option.series]\n return {\n hasMultiSeries: series.length > 1,\n hasStackInSeries: series.some((s) => (s as { stack?: string })?.stack),\n }\n }, [option])\n\n // If series already has stack defined, default to stacked=true\n const effectiveDefaultIsStacked = hasStackInSeries || defaultIsStacked\n const isStacked = storeIsStacked ?? effectiveDefaultIsStacked\n\n // Register config tool once — fn has no closure deps\n useEffect(() => {\n widgetStoreActions.registerTool(id, {\n id: STACK_TOGGLE_TOOL_ID,\n type: 'config',\n order: 10,\n enabled: false,\n fn: (currentConfig: unknown) => {\n const config = currentConfig as Record<string, unknown>\n const option = config.option as EchartOptionsProps | undefined\n if (!option) return currentConfig\n\n const series = Array.isArray(option.series)\n ? option.series\n : [option.series]\n const updatedSeries = series.map((s) => {\n const existingStack = (s as { stack?: string })?.stack\n const stackGroup =\n typeof existingStack === 'string'\n ? existingStack\n : DEFAULT_STACK_GROUP\n return { ...s, ...getEChartStackConfig(stackGroup) }\n })\n\n return { ...config, option: { ...option, series: updatedSeries } }\n },\n })\n return () => widgetStoreActions.unregisterTool(id, STACK_TOGGLE_TOOL_ID)\n }, [id])\n\n // Sync enabled from store — lightweight, no re-registration\n useEffect(() => {\n widgetStoreActions.setToolEnabled(\n id,\n STACK_TOGGLE_TOOL_ID,\n isStacked && hasMultiSeries,\n )\n }, [id, isStacked, hasMultiSeries])\n\n // Initialize store with default value only if not already configured\n useEffect(() => {\n if (storeIsStacked !== undefined) return\n widgetStoreActions.setWidget(id, { isStacked: effectiveDefaultIsStacked })\n }, [effectiveDefaultIsStacked, id, storeIsStacked])\n\n const handleToggle = useCallback(() => {\n widgetStoreActions.setWidget(id, { isStacked: !isStacked })\n }, [isStacked, id])\n\n const tooltipLabel = isStacked\n ? (labels?.unstacked ?? 'Disable stacking')\n : (labels?.stacked ?? 'Enable stacking')\n\n // Early return if there's only one series - stacking doesn't apply\n if (!hasMultiSeries) {\n return null\n }\n\n return (\n <Tooltip title={tooltipLabel}>\n <IconButton\n size='small'\n aria-label={labels?.ariaLabel ?? tooltipLabel}\n onClick={handleToggle}\n sx={actionButtonStyles.trigger}\n data-active={isStacked}\n {...IconButtonProps}\n >\n {Icon ?? <GroupedBarChartIcon />}\n </IconButton>\n </Tooltip>\n )\n}\n","import { IconButton } from '@mui/material'\nimport { CheckBoxOutlined } from '@mui/icons-material'\nimport { useCallback, useEffect } from 'react'\nimport type { LockSelectionProps, LockSelectionState } from './types'\nimport { actionButtonStyles } from '../shared/styles'\nimport { Tooltip } from '../../../components'\nimport { widgetStoreActions } from '../../stores/widget-store'\nimport { useWidgetSelector } from '../../stores/use-widget-selector'\nimport type { EchartWidgetData } from '../../echart/types'\n\nexport const LOCK_SELECTION_TOOL_ID = 'lock-selection'\n\n/**\n * Widget action button to lock the current selection.\n *\n * When locked, the widget data is filtered to only show the selected items.\n * The button is only visible when there are selected items.\n * Registers a transformation tool in the widget pipeline when mounted.\n *\n * @example\n * ```tsx\n * <LockSelection\n * id=\"my-widget\"\n * order={30}\n * selectedItems={selectedItems}\n * />\n * ```\n */\nexport function LockSelection({\n id,\n selectedItems,\n order = 30,\n labels,\n Icon,\n IconButtonProps,\n}: LockSelectionProps) {\n const { storeIsLocked } = useWidgetSelector(id, (w) => ({\n storeIsLocked: (w as LockSelectionState | undefined)?.isLocked,\n }))\n\n const isLocked = storeIsLocked ?? false\n\n // Register tool once — fn reads lockedItems from the store at execution time\n useEffect(() => {\n widgetStoreActions.registerTool(id, {\n id: LOCK_SELECTION_TOOL_ID,\n order,\n enabled: false,\n fn: (data) => {\n const widget = widgetStoreActions.getWidget<LockSelectionState>(id)\n const items = widget?.lockedItems ?? []\n if (items.length === 0) return data\n\n return filterDataByLockedItems(data as EchartWidgetData, items)\n },\n })\n\n return () => widgetStoreActions.unregisterTool(id, LOCK_SELECTION_TOOL_ID)\n }, [id, order])\n\n // Sync enabled from store — lightweight, no re-registration.\n // When selectedItems is empty (e.g., remount with no active selection),\n // disable the tool and clear stale lock state.\n useEffect(() => {\n if (isLocked && selectedItems.length === 0) {\n widgetStoreActions.setWidget(id, { isLocked: false, lockedItems: [] })\n return\n }\n widgetStoreActions.setToolEnabled(id, LOCK_SELECTION_TOOL_ID, isLocked)\n }, [id, isLocked, selectedItems.length])\n\n const handleToggle = useCallback(() => {\n if (isLocked) {\n // Unlock: clear locked items and disable tool\n widgetStoreActions.setWidget(id, {\n isLocked: false,\n lockedItems: [],\n })\n } else {\n // Lock: save selected items and enable tool\n widgetStoreActions.setWidget(id, {\n isLocked: true,\n lockedItems: selectedItems,\n })\n }\n }, [id, isLocked, selectedItems])\n\n // Don't render if no selections\n if (selectedItems.length === 0) {\n return null\n }\n\n const tooltipLabel = isLocked\n ? (labels?.unlock ?? 'Unlock selection')\n : (labels?.lock ?? 'Lock selection')\n\n const ariaLabel = labels?.ariaLabel ?? tooltipLabel\n\n return (\n <Tooltip title={tooltipLabel}>\n <IconButton\n size='small'\n aria-label={ariaLabel}\n onClick={handleToggle}\n sx={actionButtonStyles.trigger}\n data-active={isLocked}\n {...IconButtonProps}\n >\n {Icon ?? <CheckBoxOutlined fontSize='small' />}\n </IconButton>\n </Tooltip>\n )\n}\n\n/**\n * Filters widget data to only include items with names matching the locked items.\n */\nfunction filterDataByLockedItems(\n data: EchartWidgetData,\n lockedItems: string[],\n): EchartWidgetData {\n return data.map((series) =>\n series.filter((item) => {\n const name = item.name\n return typeof name === 'string' && lockedItems.includes(name)\n }),\n )\n}\n","import { TextField, InputAdornment, IconButton } from '@mui/material'\nimport { ClearOutlined, SearchOutlined } from '@mui/icons-material'\nimport { useEffect, useRef, useCallback } from 'react'\nimport { widgetStoreActions } from '../../stores/widget-store'\nimport { useWidgetSelector } from '../../stores/use-widget-selector'\nimport type { SearcherProps, SearcherFilterFn, SearcherState } from './types'\nimport type { EchartWidgetData } from '../../echart/types'\nimport { LOCK_SELECTION_TOOL_ID } from '../lock-selection/lock-selection'\n\nexport const SEARCHER_TOOL_ID = 'searcher'\n\nconst DEBOUNCE_DELAY = 300\n\n/**\n * Search input component that works with SearcherToggle.\n *\n * Registers a transformation tool in the widget pipeline when mounted.\n * Reads the enabled state from the widget store using the provided id.\n * Uses a debounced search to filter data via the transformation pipeline.\n * Auto-focuses when enabled becomes true.\n *\n * @example\n * ```tsx\n * <SearcherToggle id=\"my-widget\" />\n * <Searcher\n * id=\"my-widget\"\n * order={10}\n * labels={{ placeholder: 'Search categories...' }}\n * />\n * ```\n */\nexport function Searcher({\n id,\n filterFn,\n order = 20,\n labels,\n TextFieldProps,\n ClearIcon,\n debounceDelay = DEBOUNCE_DELAY,\n}: SearcherProps) {\n const inputRef = useRef<HTMLInputElement>(null)\n const debounceTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n // Read enabled state and search text from widget store\n const { enabled, searchText } = useWidgetSelector(id, (w) => ({\n enabled: (w as SearcherState | undefined)?.isSearchEnabled ?? false,\n searchText: (w as SearcherState | undefined)?.searchText ?? '',\n }))\n const prevEnabledRef = useRef(enabled)\n\n const filter = filterFn ?? defaultFilterFn\n\n const setSearchText = useCallback(\n (text: string) => {\n widgetStoreActions.setWidget(id, { searchText: text })\n },\n [id],\n )\n\n // Register tool once — fn reads searchText from the store at execution time.\n // Enabled is synced separately to avoid full re-registration on toggle.\n useEffect(() => {\n widgetStoreActions.registerTool(id, {\n id: SEARCHER_TOOL_ID,\n order,\n enabled: false,\n fn: async (data) => {\n const widget = widgetStoreActions.getWidget<SearcherState>(id)\n const currentSearchText = widget?.searchText ?? ''\n\n // Execute filter (can be sync or async)\n const result = filter(data as EchartWidgetData, currentSearchText)\n\n // Return result directly (pipeline will handle Promise)\n return result\n },\n disables: [LOCK_SELECTION_TOOL_ID],\n })\n\n return () => widgetStoreActions.unregisterTool(id, SEARCHER_TOOL_ID)\n }, [id, order, filter])\n\n // Sync enabled from store — lightweight, no re-registration\n useEffect(() => {\n widgetStoreActions.setToolEnabled(id, SEARCHER_TOOL_ID, enabled)\n }, [id, enabled])\n\n // Trigger pipeline re-execution when search text changes (debounced).\n // The fn reads searchText from the store, so we just need to trigger the pipeline.\n const debouncedTriggerPipeline = useCallback(() => {\n if (debounceTimeoutRef.current) {\n clearTimeout(debounceTimeoutRef.current)\n }\n debounceTimeoutRef.current = setTimeout(() => {\n widgetStoreActions.triggerToolPipeline(id)\n }, debounceDelay)\n }, [id, debounceDelay])\n\n // Auto-focus when enabled becomes true\n useEffect(() => {\n // Transition from disabled to enabled - focus input\n if (enabled && !prevEnabledRef.current && inputRef.current) {\n inputRef.current.focus()\n }\n\n prevEnabledRef.current = enabled\n }, [enabled])\n\n // Cleanup debounce timeout on unmount\n useEffect(() => {\n return () => {\n if (debounceTimeoutRef.current) {\n clearTimeout(debounceTimeoutRef.current)\n }\n }\n }, [])\n\n const handleChange = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = event.target.value\n setSearchText(newValue)\n debouncedTriggerPipeline()\n },\n [debouncedTriggerPipeline, setSearchText],\n )\n\n const handleClear = useCallback(() => {\n setSearchText('')\n widgetStoreActions.triggerToolPipeline(id)\n if (inputRef.current) {\n inputRef.current.focus()\n }\n }, [id, setSearchText])\n\n if (!enabled) {\n return null\n }\n\n const placeholder = labels?.placeholder ?? 'Search...'\n const clearAriaLabel = labels?.clearAriaLabel ?? 'Clear search'\n\n return (\n <TextField\n inputRef={inputRef}\n size='small'\n fullWidth\n variant='filled'\n placeholder={placeholder}\n value={searchText}\n onChange={handleChange}\n InputProps={{\n startAdornment: (\n <InputAdornment position='start'>\n <SearchOutlined />\n </InputAdornment>\n ),\n endAdornment: searchText ? (\n <InputAdornment position='end'>\n <IconButton\n size='small'\n aria-label={clearAriaLabel}\n onClick={handleClear}\n edge='end'\n >\n {ClearIcon ?? <ClearOutlined fontSize='small' />}\n </IconButton>\n </InputAdornment>\n ) : null,\n }}\n {...TextFieldProps}\n />\n )\n}\n\n/**\n * Default filter function that searches all string fields case-insensitively.\n * Note: Should be synchronous for the new pipeline architecture.\n */\nconst defaultFilterFn: SearcherFilterFn = (\n data: EchartWidgetData,\n searchText: string,\n) => {\n if (!searchText.trim()) return Promise.resolve(data)\n\n const lowerSearch = searchText.toLowerCase()\n\n return Promise.resolve(\n data.map((series) =>\n series.filter((item) =>\n Object.values(item).some((value) =>\n String(value).toLowerCase().includes(lowerSearch),\n ),\n ),\n ),\n )\n}\n","import { IconButton } from '@mui/material'\nimport { SearchOutlined } from '@mui/icons-material'\nimport { useCallback, useEffect } from 'react'\nimport type { SearcherToggleProps, SearcherState } from './types'\nimport { actionButtonStyles } from '../shared/styles'\nimport { Tooltip } from '../../../components'\nimport { widgetStoreActions } from '../../stores/widget-store'\nimport { useWidgetSelector } from '../../stores/use-widget-selector'\n\n/**\n * Widget action button to toggle search functionality.\n *\n * Stores the enabled state in the widget store using the provided id.\n * When search is active, the button shows an active state with a light background.\n * Use in conjunction with the Searcher component to display the search input.\n *\n * @example\n * ```tsx\n * <SearcherToggle id=\"my-widget\" />\n * <Searcher\n * id=\"my-widget\"\n * data={widgetData}\n * />\n * ```\n */\nexport function SearcherToggle({\n id,\n defaultEnabled = false,\n labels,\n Icon,\n IconButtonProps,\n}: SearcherToggleProps) {\n const { storeIsEnabled } = useWidgetSelector(id, (w) => ({\n storeIsEnabled: (w as SearcherState | undefined)?.isSearchEnabled,\n }))\n\n const isEnabled = storeIsEnabled ?? defaultEnabled\n\n // Initialize store with default value on mount\n useEffect(() => {\n const currentValue =\n widgetStoreActions.getWidget<SearcherState>(id)?.isSearchEnabled\n if (currentValue === undefined) {\n widgetStoreActions.setWidget(id, { isSearchEnabled: defaultEnabled })\n }\n }, [defaultEnabled, id])\n\n const handleToggle = useCallback(() => {\n widgetStoreActions.setWidget(id, { isSearchEnabled: !isEnabled })\n }, [id, isEnabled])\n\n const tooltipLabel = isEnabled\n ? (labels?.disable ?? 'Disable search')\n : (labels?.enable ?? 'Enable search')\n\n const ariaLabel = labels?.ariaLabel ?? tooltipLabel\n\n return (\n <Tooltip title={tooltipLabel}>\n <IconButton\n size='small'\n aria-label={ariaLabel}\n onClick={handleToggle}\n sx={actionButtonStyles.trigger}\n data-active={isEnabled}\n {...IconButtonProps}\n >\n {Icon ?? <SearchOutlined fontSize='small' />}\n </IconButton>\n </Tooltip>\n )\n}\n","export const ChangeColumnIcon = () => (\n <svg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 18 18'>\n <path\n fill='currentColor'\n fillRule='evenodd'\n d='M14.25 2.25H3.75c-.825 0-1.5.675-1.5 1.5v10.5c0 .825.675 1.5 1.5 1.5h10.5c.825 0 1.5-.675 1.5-1.5V3.75c0-.825-.675-1.5-1.5-1.5m-3.75 12h-3V3.75h3zM3.75 3.75H6v10.5H3.75zM12 14.25V3.75h2.25v10.5z'\n clipRule='evenodd'\n />\n </svg>\n)\n","import { useSortable } from '@dnd-kit/sortable'\nimport { CSS } from '@dnd-kit/utilities'\nimport { ListItemText, MenuItem } from '@mui/material'\nimport type { TableColumn } from '../../table/types'\n\nexport interface SortableColumnItemProps {\n column: TableColumn\n}\n\n/**\n * A draggable menu item for column reordering.\n * Uses @dnd-kit/sortable for drag-and-drop functionality.\n */\nexport function SortableColumnItem({ column }: SortableColumnItemProps) {\n const {\n attributes,\n listeners,\n setNodeRef,\n transform,\n transition,\n isDragging,\n } = useSortable({ id: column.id })\n\n const style = {\n transform: CSS.Transform.toString(\n transform ? { ...transform, x: 0 } : null,\n ),\n transition,\n opacity: isDragging ? 0.5 : 1,\n cursor: isDragging ? 'grabbing' : 'grab',\n }\n\n return (\n <MenuItem\n ref={setNodeRef}\n style={style}\n {...attributes}\n {...listeners}\n role='menuitem'\n tabIndex={0}\n sx={{\n '&:focus-visible': {\n outline: (theme) => `2px solid ${theme.palette.primary.main}`,\n outlineOffset: -2,\n },\n }}\n >\n <ListItemText>{column.label}</ListItemText>\n </MenuItem>\n )\n}\n","import {\n DndContext,\n closestCenter,\n KeyboardSensor,\n PointerSensor,\n useSensor,\n useSensors,\n type DragEndEvent,\n} from '@dnd-kit/core'\nimport {\n arrayMove,\n SortableContext,\n sortableKeyboardCoordinates,\n verticalListSortingStrategy,\n} from '@dnd-kit/sortable'\nimport { IconButton, Menu, SvgIcon } from '@mui/material'\nimport {\n useCallback,\n useEffect,\n useMemo,\n useState,\n type MouseEvent,\n} from 'react'\nimport { widgetStoreActions } from '../../stores/widget-store'\nimport type { ChangeColumnProps } from './types'\nimport { actionButtonStyles } from '../shared/styles'\nimport { Tooltip } from '../../../components'\nimport type { TableColumn, TableWidgetState } from '../../table/types'\nimport { ChangeColumnIcon } from './change-column-icon'\nimport { SortableColumnItem } from './sortable-column-item'\nimport { useWidgetSelector } from '../../stores/use-widget-selector'\n\nexport const CHANGE_COLUMN_TOOL_ID = 'change-column'\n\n/**\n * Widget action to reorder columns in a table widget via drag-and-drop.\n *\n * This action reads the columns from the widget store and allows users to\n * drag and drop columns to reorder them. All columns are displayed and\n * can be reordered.\n *\n * Registers as a config pipeline tool so that column order is automatically\n * re-applied when the base config is updated (e.g., by WidgetLoader).\n *\n * Returns null if there are fewer than 2 columns.\n *\n * @example\n * ```tsx\n * <ChangeColumn id=\"my-table-widget\" />\n * ```\n */\nexport function ChangeColumn({\n id,\n labels,\n Icon,\n IconButtonProps,\n MenuProps,\n}: ChangeColumnProps) {\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null)\n const { columns } = useWidgetSelector(id, (w) => ({\n columns: (w as TableWidgetState | undefined)?.columns,\n }))\n\n /**\n * Config tool function that reorders columns to match the current widget state.\n * Reads desired order from the widget store (set by handleDragEnd via setWidget).\n * Preserves referential identity when the order already matches to prevent\n * re-render loops in the config pipeline.\n */\n const reorderFn = useCallback(\n (currentConfig: unknown): unknown => {\n const widgetState = widgetStoreActions.getWidget<TableWidgetState>(id)\n const currentColumns = widgetState?.columns\n if (!currentColumns || currentColumns.length === 0) return currentConfig\n\n const config = currentConfig as Record<string, unknown>\n const configColumns = config.columns as TableColumn[] | undefined\n if (!configColumns || configColumns.length === 0) return currentConfig\n\n // Check if config columns are already in the same order as widget columns\n const alreadyMatches =\n configColumns.length === currentColumns.length &&\n configColumns.every((col, i) => col.id === currentColumns[i]?.id)\n if (alreadyMatches) return currentConfig\n\n // Reorder config columns to match widget column order\n const columnMap = new Map(configColumns.map((col) => [col.id, col]))\n const reordered: TableColumn[] = []\n\n for (const widgetCol of currentColumns) {\n const col = columnMap.get(widgetCol.id)\n if (col) {\n reordered.push(col)\n columnMap.delete(widgetCol.id)\n }\n }\n\n // Append any new columns not in the widget order\n for (const col of columnMap.values()) {\n reordered.push(col)\n }\n\n // If result matches current widget columns, reuse the same array reference\n // to prevent downstream subscribers from detecting a change\n const matchesWidget =\n reordered.length === currentColumns.length &&\n reordered.every((col, i) => col.id === currentColumns[i]?.id)\n\n return { ...config, columns: matchesWidget ? currentColumns : reordered }\n },\n [id],\n )\n\n const sensors = useSensors(\n useSensor(PointerSensor),\n useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates,\n }),\n )\n\n const columnIds = useMemo(\n () => columns?.map((col) => col.id) ?? [],\n [columns],\n )\n\n // Register config tool on mount\n useEffect(() => {\n widgetStoreActions.registerTool(id, {\n id: CHANGE_COLUMN_TOOL_ID,\n type: 'config',\n order: 100,\n enabled: true,\n fn: reorderFn,\n })\n return () => widgetStoreActions.unregisterTool(id, CHANGE_COLUMN_TOOL_ID)\n }, [id, reorderFn])\n\n const handleToggle = useCallback((event: MouseEvent<HTMLElement>) => {\n event.stopPropagation()\n setAnchorEl(event.currentTarget)\n }, [])\n\n const handleClose = useCallback(() => {\n setAnchorEl(null)\n }, [])\n\n const handleDragEnd = (event: DragEndEvent) => {\n const { active, over } = event\n if (!over || active.id === over.id || !columns) return\n const oldIndex = columns.findIndex((col) => col.id === active.id)\n const newIndex = columns.findIndex((col) => col.id === over.id)\n if (oldIndex !== -1 && newIndex !== -1) {\n const newColumns = arrayMove(columns, oldIndex, newIndex)\n widgetStoreActions.setWidget(id, { columns: newColumns })\n }\n }\n\n // Return null if there are fewer than 2 columns\n if (!columns || columns.length < 2) {\n return null\n }\n\n const tooltipLabel = labels?.tooltip ?? 'Change column'\n const isOpen = Boolean(anchorEl)\n\n return (\n <>\n <Tooltip title={tooltipLabel}>\n <IconButton\n size='small'\n aria-label={labels?.ariaLabel ?? tooltipLabel}\n aria-controls={isOpen ? 'change-column-menu' : undefined}\n aria-haspopup='true'\n aria-expanded={isOpen ? 'true' : undefined}\n onClick={handleToggle}\n data-active={isOpen}\n sx={actionButtonStyles.trigger}\n {...IconButtonProps}\n >\n {Icon ?? (\n <SvgIcon>\n <ChangeColumnIcon />\n </SvgIcon>\n )}\n </IconButton>\n </Tooltip>\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragEnd={handleDragEnd}\n >\n <Menu\n id='change-column-menu'\n anchorEl={anchorEl}\n open={isOpen}\n onClose={handleClose}\n anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}\n transformOrigin={{ vertical: 'top', horizontal: 'right' }}\n slotProps={{\n paper: {\n sx: { overflow: 'hidden' },\n },\n }}\n {...MenuProps}\n >\n <SortableContext\n items={columnIds}\n strategy={verticalListSortingStrategy}\n >\n {columns.map((column) => (\n <SortableColumnItem key={column.id} column={column} />\n ))}\n </SortableContext>\n </Menu>\n </DndContext>\n </>\n )\n}\n","import type { SxProps, Theme } from '@mui/material'\n\nexport const styles = {\n container: {\n display: 'flex',\n alignItems: 'center',\n gap: ({ spacing }) => spacing(0.25),\n },\n trigger: {\n '&[data-active=\"true\"]': {\n background: (theme: Theme) => theme.palette.primary.relatedLight,\n },\n },\n} satisfies Record<string, SxProps<Theme>>\n","import { Box, IconButton } from '@mui/material'\nimport { HighlightAltOutlined } from '@mui/icons-material'\nimport { useEffect, useCallback, useRef } from 'react'\nimport { widgetStoreActions } from '../../stores/widget-store'\nimport type { BrushSelectedItems, BrushToggleProps, BrushState } from './types'\nimport { styles } from './style'\nimport { Tooltip } from '../../../components'\nimport { getEChartBrushConfig } from '../../echart/utils'\nimport type { EchartOptionsProps, EchartWidgetState } from '../../echart/types'\nimport { useWidgetSelector } from '../../stores/use-widget-selector'\n\nexport const BRUSH_TOGGLE_TOOL_ID = 'brush-toggle'\n\n/**\n * Widget action to toggle EChart brush selection functionality.\n *\n * Registers as a config pipeline tool so that brush configuration is automatically\n * re-applied when the base config is updated (e.g., by WidgetLoader).\n *\n * Brush state is stored in the widget store root, and the tool derives its\n * `enabled` flag from the store. This keeps state accessible across component instances.\n *\n * When brush is active, users can drag across bars to select a range.\n * Selection clearing is handled via the chart's brush interactions/toolbox configuration.\n * Only intended for use in fullscreen ToolbarActions for bar and histogram widgets.\n *\n * @example\n * ```tsx\n * <BrushToggle\n * id=\"my-widget\"\n * onBrushSelected={(items) => console.log(items)}\n * />\n * ```\n */\nexport function BrushToggle({\n id,\n onBrushSelected,\n labels,\n Icon,\n IconButtonProps,\n}: BrushToggleProps) {\n const selected = useRef<BrushSelectedItems>({ dataIndex: [], seriesIndex: 0 })\n\n // Read brush state from widget store root — single source of truth\n const { brush } = useWidgetSelector(id, (w) => ({\n brush: (w as BrushState | undefined)?.brush ?? false,\n }))\n\n const handleToggle = useCallback(() => {\n const newBrush = !brush\n widgetStoreActions.setWidget(id, { brush: newBrush })\n\n if (newBrush) {\n onBrushSelected?.({ dataIndex: [], seriesIndex: 0 }) // Clear selection when enabling brush\n }\n }, [brush, id, onBrushSelected])\n\n // Re-dispatch brush action after every ECharts render while brush is active\n useEffect(() => {\n if (!brush) return\n\n const instance =\n widgetStoreActions.getWidget<EchartWidgetState>(id)?.instance?.current\n if (!instance) return\n\n const handleRendered = () => {\n const config = getEChartBrushConfig()\n instance.dispatchAction({\n type: 'takeGlobalCursor',\n key: 'brush',\n brushOption: {\n brushType: config.brush.brushType,\n brushMode: config.brush.brushMode,\n },\n })\n }\n\n // Dispatch immediately for the initial activation\n handleRendered()\n\n // Re-dispatch after each render (covers setOption with notMerge:true)\n instance.on('rendered', handleRendered)\n\n return () => {\n instance.off('rendered', handleRendered)\n }\n }, [brush, id])\n\n // Handle brushSelected event to capture selected bar indices\n const handleBrushSelected = useCallback((event: unknown) => {\n const brushEvent = event as {\n batch?: {\n selected?: {\n dataIndex?: number[]\n seriesIndex?: number\n }[]\n }[]\n }\n\n const allSelected =\n brushEvent.batch?.flatMap((batchItem) => batchItem.selected ?? []) ?? []\n\n if (!allSelected.length) {\n selected.current = {\n dataIndex: [],\n seriesIndex: 0,\n }\n return\n }\n\n // Use the first seriesIndex as the primary one (matches previous behavior)\n const primarySeriesIndex = allSelected[0]?.seriesIndex ?? 0\n\n const mergedDataIndex = Array.from(\n new Set(\n allSelected\n .filter(\n (item) =>\n item.seriesIndex === undefined ||\n item.seriesIndex === primarySeriesIndex,\n )\n .flatMap((item) => item.dataIndex ?? []),\n ),\n )\n\n selected.current = {\n dataIndex: mergedDataIndex,\n seriesIndex: primarySeriesIndex,\n }\n }, [])\n\n const handleBrushEnd = useCallback(() => {\n onBrushSelected?.(selected.current)\n widgetStoreActions.setWidget(id, { brush: false }) // Disable brush after selection is made\n }, [onBrushSelected, id])\n\n // Register config tool once — fn closure depends on event handlers.\n // Enabled is synced separately to avoid full re-registration on toggle.\n useEffect(() => {\n widgetStoreActions.registerTool(id, {\n id: BRUSH_TOGGLE_TOOL_ID,\n type: 'config',\n order: 25,\n enabled: false,\n fn: (currentConfig) => {\n const config = currentConfig as Record<string, unknown>\n const option = config.option as EchartOptionsProps | undefined\n const currentOnEvents =\n (config.onEvents as Record<string, unknown> | undefined) ?? {}\n\n const brushConfig = getEChartBrushConfig()\n\n const onEvents = {\n ...currentOnEvents,\n brushSelected: handleBrushSelected,\n brushEnd: handleBrushEnd,\n }\n\n return {\n ...config,\n option: {\n ...option,\n ...brushConfig,\n },\n onEvents,\n }\n },\n })\n return () => widgetStoreActions.unregisterTool(id, BRUSH_TOGGLE_TOOL_ID)\n }, [id, handleBrushSelected, handleBrushEnd])\n\n // Sync enabled from store — lightweight, no re-registration\n useEffect(() => {\n widgetStoreActions.setToolEnabled(id, BRUSH_TOGGLE_TOOL_ID, brush)\n }, [id, brush])\n\n const enableLabel = labels?.enable ?? 'Enable brush selection'\n const disableLabel = labels?.disable ?? 'Disable brush selection'\n const tooltipLabel = brush ? disableLabel : enableLabel\n\n return (\n <Box sx={styles.container}>\n <Tooltip title={tooltipLabel}>\n <IconButton\n size='small'\n aria-label={labels?.ariaLabel ?? tooltipLabel}\n onClick={handleToggle}\n sx={styles.trigger}\n data-active={brush}\n {...IconButtonProps}\n >\n {Icon ?? <HighlightAltOutlined />}\n </IconButton>\n </Tooltip>\n </Box>\n )\n}\n"],"names":["styles","title","container","display","alignItems","justifyContent","gap","content","flexDirection","spacing","EMPTY_DIALOG_CONTENT_PROPS","FullScreen","t0","$","_c","id","labels","children","Icon","IconButtonProps","DialogContentProps","t1","DialogProps","t2","undefined","sx","isFullScreen","useWidgetSelector","_temp","t3","updates","widgetStoreActions","setWidget","updateFullScreenConfig","t4","t5","FullscreenOutlined","t6","IconButton","t7","t8","ariaLabel","t9","t10","t11","Typography","t12","t13","Symbol","for","Close","t14","jsx","t15","DialogTitle","t16","t17","DialogContent","t18","Dialog","t19","w","EMPTY_LABELS","Download","items","data","isDownloading","setIsDownloading","useState","anchorEl","setAnchorEl","event","stopPropagation","currentTarget","handleToggle","data_0","option","link","document","createElement","href","download","filename","style","body","appendChild","click","removeChild","callback","handleDownload","event_0","option_0","result","modifier","handleClick","length","CircularProgress","FileDownloadOutlined","vertical","horizontal","Boolean","paddingBottom","option_1","jsxs","MenuItem","disabled","e","icon","ListItemIcon","color","ListItemText","label","map","Menu","actionButtonStyles","trigger","background","theme","palette","primary","relatedLight","calculateTotal","reduce","total","series","seriesTotal","item","Array","isArray","value","at","Object","entries","itemTotal","key","toRelativeData","index","transformed","RELATIVE_DATA_TOOL_ID","RELATIVE_DATA_CONFIG_TOOL_ID","RelativeData","order","defaultIsRelative","percentFormatterRef","useRef","isRelative","getWidget","useEffect","registerTool","enabled","fn","unregisterTool","setToolEnabled","type","currentConfig","config","widget","hasSourceData","sourceData","current","locale","Intl","NumberFormat","minimumFractionDigits","maximumFractionDigits","format","formatter","max","originalFormatter","originalMax","widget_0","newIsRelative","widget_1","tooltipLabel","absolute","relative","PercentOutlined","Tooltip","echartData","ZOOM_TOGGLE_TOOL_ID","ZoomToggle","defaultZoom","defaultZoomStart","defaultZoomEnd","ResetIcon","useTheme","zoom","zoomStart","zoomEnd","zoomEvent","start","batch","end","handleDataZoom","currentOnEvents","onEvents","start_0","end_0","legend","hasLegend","show","sliderHeight","parseInt","zoomConfig","getEChartZoomConfig","inside","xSlider","ySlider","bottomOffset","legendBottomOffset","grid","gridBottom","bottom","dataZoom","triggerToolPipeline","newZoom","handleReset","enableLabel","enable","disableLabel","disable","resetLabel","reset","ZoomInOutlined","t20","SubdirectoryArrowLeftOutlined","t21","Box","GroupedBarChartIcon","STACK_TOGGLE_TOOL_ID","StackToggle","defaultIsStacked","storeIsStacked","bb0","hasMultiSeries","hasStackInSeries","some","_temp2","effectiveDefaultIsStacked","isStacked","_temp4","unstacked","stacked","updatedSeries","_temp3","s_0","existingStack","s","stack","getEChartStackConfig","DEFAULT_STACK_GROUP","LOCK_SELECTION_TOOL_ID","LockSelection","selectedItems","storeIsLocked","isLocked","lockedItems","filterDataByLockedItems","unlock","lock","CheckBoxOutlined","filter","name","includes","SEARCHER_TOOL_ID","DEBOUNCE_DELAY","Searcher","filterFn","TextFieldProps","ClearIcon","debounceDelay","inputRef","debounceTimeoutRef","searchText","prevEnabledRef","defaultFilterFn","text","setSearchText","currentSearchText","disables","clearTimeout","setTimeout","debouncedTriggerPipeline","focus","newValue","target","handleChange","handleClear","placeholder","clearAriaLabel","InputAdornment","SearchOutlined","ClearOutlined","startAdornment","endAdornment","TextField","isSearchEnabled","trim","Promise","resolve","lowerSearch","toLowerCase","values","String","SearcherToggle","defaultEnabled","storeIsEnabled","isEnabled","ChangeColumnIcon","SortableColumnItem","column","attributes","listeners","setNodeRef","transform","transition","isDragging","useSortable","CSS","Transform","toString","x","opacity","cursor","outline","outlineOffset","main","CHANGE_COLUMN_TOOL_ID","ChangeColumn","MenuProps","columns","currentColumns","configColumns","every","col","i","columnMap","Map","reordered","widgetCol","col_1","get","push","delete","col_2","matchesWidget","col_3","i_0","reorderFn","coordinateGetter","sortableKeyboardCoordinates","sensors","useSensors","useSensor","PointerSensor","KeyboardSensor","columnIds","handleClose","active","over","oldIndex","findIndex","col_5","newIndex","col_6","newColumns","arrayMove","handleDragEnd","tooltip","isOpen","SvgIcon","paper","overflow","SortableContext","verticalListSortingStrategy","DndContext","closestCenter","t22","col_4","col_0","BRUSH_TOGGLE_TOOL_ID","BrushToggle","onBrushSelected","dataIndex","seriesIndex","selected","brush","newBrush","instance","handleRendered","getEChartBrushConfig","dispatchAction","brushOption","brushType","brushMode","on","off","allSelected","flatMap","primarySeriesIndex","mergedDataIndex","from","Set","handleBrushSelected","handleBrushEnd","config_0","brushConfig","brushSelected","brushEnd","HighlightAltOutlined","item_0","batchItem"],"mappings":"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"}
1
+ {"version":3,"file":"actions.js","sources":["../../src/widgets/actions/fullscreen/styles.ts","../../src/widgets/actions/fullscreen/fullscreen.tsx","../../src/widgets/actions/download/download.tsx","../../src/widgets/actions/shared/styles.ts","../../src/widgets/actions/relative-data/utils.ts","../../src/widgets/actions/relative-data/relative-data.tsx","../../src/widgets/actions/zoom-toggle/style.ts","../../src/widgets/actions/zoom-toggle/zoom-toggle.tsx","../../src/widgets/actions/stack-toggle/grouped-bar-chart-icon.tsx","../../src/widgets/actions/stack-toggle/stack-toggle.tsx","../../src/widgets/actions/lock-selection/lock-selection.tsx","../../src/widgets/actions/searcher/searcher.tsx","../../src/widgets/actions/searcher/searcher-toggle.tsx","../../src/widgets/actions/change-column/change-column-icon.tsx","../../src/widgets/actions/change-column/sortable-column-item.tsx","../../src/widgets/actions/change-column/change-column.tsx","../../src/widgets/actions/brush-toggle/style.ts","../../src/widgets/actions/brush-toggle/brush-toggle.tsx"],"sourcesContent":["import type { SxProps, Theme } from '@mui/material'\n\nexport const styles = {\n title: {\n container: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: 1,\n },\n },\n content: {\n display: 'flex',\n flexDirection: 'column',\n gap: ({ spacing }) => spacing(1),\n },\n} satisfies Record<string, SxProps<Theme>>\n","import {\n Dialog,\n DialogContent,\n DialogTitle,\n IconButton,\n Typography,\n} from '@mui/material'\nimport { widgetStoreActions } from '../../stores/widget-store'\nimport { useWidgetSelector } from '../../stores/use-widget-selector'\nimport { Close, FullscreenOutlined } from '@mui/icons-material'\nimport type {\n FullScreenConfig,\n FullScreenProps,\n FullScreenState,\n} from './types'\nimport { styles } from './styles'\n\nconst EMPTY_DIALOG_CONTENT_PROPS: NonNullable<\n FullScreenProps['DialogContentProps']\n> = {}\n\n/**\n * Displays widget content in a fullscreen modal dialog.\n *\n * Manages fullscreen state via the widget store and renders a MUI Dialog\n * with the widget title and a close button.\n *\n * @example\n * ```tsx\n * <FullScreen id=\"my-widget\" labels={{ ariaLabel: 'Expand chart' }}>\n * <ChartContent id=\"my-widget\" />\n * </FullScreen>\n * ```\n */\nexport function FullScreen({\n id,\n labels,\n children,\n Icon,\n IconButtonProps,\n DialogContentProps: {\n sx,\n ...DialogContentProps\n } = EMPTY_DIALOG_CONTENT_PROPS,\n DialogProps,\n}: FullScreenProps) {\n const { isFullScreen, title } = useWidgetSelector(id, (w) => ({\n isFullScreen: (w as FullScreenState | undefined)?.isFullScreen,\n title: (w as FullScreenState | undefined)?.title,\n }))\n const updateFullScreenConfig = (updates: Partial<FullScreenConfig>) => {\n widgetStoreActions.setWidget<FullScreenState>(id, {\n isFullScreen: updates.isFullScreen,\n })\n }\n\n return (\n <>\n <IconButton\n {...IconButtonProps}\n onClick={() => updateFullScreenConfig({ isFullScreen: true })}\n >\n {Icon ?? <FullscreenOutlined />}\n </IconButton>\n <Dialog\n maxWidth={false}\n open={!!isFullScreen}\n keepMounted\n aria-labelledby={labels?.ariaLabel ?? `fullscreen-dialog-title-${id}`}\n {...DialogProps}\n onClose={() => updateFullScreenConfig({ isFullScreen: false })}\n >\n <DialogTitle\n id={`fullscreen-dialog-title-${id}`}\n sx={styles.title.container}\n >\n <Typography variant='subtitle1' component='span'>\n {title}\n </Typography>\n <IconButton\n onClick={() => updateFullScreenConfig({ isFullScreen: false })}\n >\n <Close />\n </IconButton>\n </DialogTitle>\n <DialogContent\n sx={{\n ...styles.content,\n ...sx,\n }}\n {...DialogContentProps}\n >\n {children}\n </DialogContent>\n </Dialog>\n </>\n )\n}\n","import {\n CircularProgress,\n IconButton,\n ListItemIcon,\n ListItemText,\n Menu,\n MenuItem,\n} from '@mui/material'\nimport type { DownloadItem, DownloadProps } from './types'\nimport { FileDownloadOutlined } from '@mui/icons-material'\nimport { useState, type MouseEvent } from 'react'\nimport { useWidgetSelector } from '../../stores/use-widget-selector'\n\nconst EMPTY_LABELS: NonNullable<DownloadProps['labels']> = {}\n\n/**\n * Dropdown menu action for exporting widget data in various formats (CSV, PNG, etc.).\n *\n * Reads widget data from the store and triggers downloads using the modifier\n * function defined in each `DownloadItem`.\n *\n * @example\n * ```tsx\n * <Download id={widgetId} items={barDownloadConfig({ refUI })} />\n * ```\n */\nexport function Download({\n id,\n items,\n labels = EMPTY_LABELS,\n Icon,\n IconButtonProps,\n}: DownloadProps) {\n const { data } = useWidgetSelector(id, (w) => ({\n data: w?.data,\n }))\n\n const [isDownloading, setIsDownloading] = useState(false)\n const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null)\n\n const handleToggle = (event: MouseEvent<HTMLElement>) => {\n event.stopPropagation()\n setAnchorEl(event.currentTarget)\n }\n\n const handleDownload = (data: string, option: DownloadItem) => {\n const link = document.createElement('a')\n link.href = data\n link.download = option.filename ?? id\n link.style.display = 'none'\n document.body.appendChild(link)\n link.click()\n document.body.removeChild(link)\n option.callback?.(link.href)\n }\n\n const handleClick = async (\n event: MouseEvent<HTMLElement>,\n option: DownloadItem,\n ) => {\n event.stopPropagation()\n\n setIsDownloading(true)\n setAnchorEl(null)\n\n const result = await option.modifier(data)\n\n if (!result) {\n setIsDownloading(false)\n return\n }\n\n handleDownload(result, option)\n setIsDownloading(false)\n }\n\n return (\n <>\n <IconButton\n size='small'\n aria-label={labels.ariaLabel ?? 'download options'}\n aria-controls='options-menu'\n aria-haspopup='true'\n onClick={handleToggle}\n {...IconButtonProps}\n disabled={isDownloading || items.length === 0}\n className={isDownloading || anchorEl ? 'active' : ''}\n >\n {isDownloading ? (\n <CircularProgress size={18} color='inherit' />\n ) : (\n (Icon ?? <FileDownloadOutlined />)\n )}\n </IconButton>\n <Menu\n variant='menu'\n elevation={8}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'right',\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'right',\n }}\n anchorEl={anchorEl}\n open={Boolean(anchorEl)}\n onClose={() => setAnchorEl(null)}\n MenuListProps={{\n sx: {\n paddingBottom: 0,\n },\n }}\n >\n {items.map((option) => (\n <MenuItem\n key={option.id}\n disabled={option.disabled}\n onClick={(e) => void handleClick(e, option)}\n >\n {option.icon && (\n <ListItemIcon sx={{ color: 'text.primary' }}>\n {option.icon}\n </ListItemIcon>\n )}\n <ListItemText>{option.label}</ListItemText>\n </MenuItem>\n ))}\n </Menu>\n </>\n )\n}\n","import type { SxProps, Theme } from '@mui/material'\n\n/**\n * Shared styles for widget action buttons\n */\nexport const actionButtonStyles = {\n trigger: {\n '&[data-active=\"true\"]': {\n background: (theme: Theme) => theme.palette.primary.relatedLight,\n },\n },\n} satisfies Record<string, SxProps<Theme>>\n","import type { EchartWidgetData } from '../../echart/types'\n\n/**\n * Calculates the sum of all numeric values in the data\n */\nexport function calculateTotal(data: EchartWidgetData): number {\n return data.reduce((total, series) => {\n return series.reduce((seriesTotal, item) => {\n if (Array.isArray(item)) {\n const value = item.at(-1) as number\n return typeof value === 'number' ? seriesTotal + value : seriesTotal\n }\n\n return Object.entries(item).reduce((itemTotal: number, [key, value]) => {\n if (key === 'name') {\n return itemTotal\n }\n return typeof value === 'number' ? itemTotal + value : itemTotal\n }, seriesTotal)\n }, total)\n }, 0)\n}\n\n/**\n * Transforms data to relative (percentage) values\n */\nexport function toRelativeData(\n data: EchartWidgetData,\n total: number,\n): EchartWidgetData {\n if (total === 0) return data\n\n return data.map((series) =>\n series.map((item) => {\n if (Array.isArray(item)) {\n return item.map((value: number, index) => {\n if (index === item.length - 1 && typeof value === 'number') {\n return (value / total) * 100\n }\n return value\n }) as typeof item\n }\n\n const transformed: Record<string, string | number> = {}\n\n for (const [key, value] of Object.entries(item)) {\n if (key === 'name') {\n transformed[key] = value\n continue\n }\n transformed[key] =\n typeof value === 'number' ? (value / total) * 100 : value\n }\n\n return transformed\n }),\n )\n}\n","import { IconButton } from '@mui/material'\nimport { PercentOutlined } from '@mui/icons-material'\nimport { useCallback, useEffect, useRef } from 'react'\nimport { widgetStoreActions } from '../../stores/widget-store'\nimport { useWidgetSelector } from '../../stores/use-widget-selector'\nimport type { RelativeDataProps, RelativeDataState } from './types'\nimport { actionButtonStyles } from '../shared/styles'\nimport { Tooltip } from '../../../components'\nimport { calculateTotal, toRelativeData } from './utils'\nimport type { EchartWidgetData } from '../../../widgets/echart'\n\nexport const RELATIVE_DATA_TOOL_ID = 'relative-data'\nexport const RELATIVE_DATA_CONFIG_TOOL_ID = 'relative-data-config'\n\n/**\n * Widget action to toggle between relative (percentage) and absolute data display.\n *\n * Registers two transformation tools in the widget pipeline when mounted:\n * - A data tool that converts values to percentages (enabled/disabled via store)\n * - A config tool that is **always enabled** and reads `isRelative` from the store\n * to decide whether to apply the percentage formatter or restore the original one.\n * The config tool must always participate because the original formatter may have\n * been set via `setWidget` (not in the base config), so disabling the tool would\n * leave the percentage formatter stuck on the widget.\n *\n * @example\n * ```tsx\n * <RelativeData\n * id=\"my-widget\"\n * order={20}\n * defaultIsRelative={false}\n * />\n * ```\n */\nexport function RelativeData({\n id,\n order = 10,\n defaultIsRelative = false,\n labels,\n Icon,\n IconButtonProps,\n}: RelativeDataProps) {\n const percentFormatterRef = useRef<((value: number) => string) | undefined>(\n undefined,\n )\n\n // Read isRelative from widget store root — single source of truth\n const { isRelative } = useWidgetSelector(id, (w) => ({\n isRelative:\n (w as RelativeDataState | undefined)?.isRelative ?? defaultIsRelative,\n }))\n\n // Initialize store with default value on mount.\n // When defaultIsRelative=true, capture originals so toggling OFF can restore them.\n useEffect(() => {\n const current = widgetStoreActions.getWidget<RelativeDataState>(id)\n if (current?.isRelative === undefined) {\n if (defaultIsRelative) {\n widgetStoreActions.setWidget(id, {\n isRelative: true,\n originalFormatter: current?.formatter,\n originalMax: (current as unknown as Record<string, number>)?.max,\n })\n } else {\n widgetStoreActions.setWidget(id, { isRelative: defaultIsRelative })\n }\n }\n }, [id, defaultIsRelative])\n\n // Register data tool once — fn has no closure deps\n useEffect(() => {\n widgetStoreActions.registerTool(id, {\n id: RELATIVE_DATA_TOOL_ID,\n order,\n enabled: defaultIsRelative,\n fn: (data) => {\n const echartData = data as EchartWidgetData\n const total = calculateTotal(echartData)\n return toRelativeData(echartData, total)\n },\n })\n\n return () => widgetStoreActions.unregisterTool(id, RELATIVE_DATA_TOOL_ID)\n }, [id, order, defaultIsRelative])\n\n // Sync data tool enabled — lightweight, no re-registration\n useEffect(() => {\n widgetStoreActions.setToolEnabled(id, RELATIVE_DATA_TOOL_ID, isRelative)\n }, [id, isRelative])\n\n // Register config tool — ALWAYS enabled.\n // Reads isRelative, originalFormatter, originalMax from the store at execution time:\n // - isRelative=true → applies percentage formatter and max=100\n // - isRelative=false → restores original formatter/max from store\n useEffect(() => {\n widgetStoreActions.registerTool(id, {\n id: RELATIVE_DATA_CONFIG_TOOL_ID,\n type: 'config',\n order,\n enabled: true,\n fn: (currentConfig: unknown) => {\n const config = currentConfig as Record<string, unknown>\n const widget = widgetStoreActions.getWidget<RelativeDataState>(id)\n\n const hasSourceData =\n widget?.sourceData != null &&\n !(Array.isArray(widget.sourceData) && widget.sourceData.length === 0)\n\n if (widget?.isRelative) {\n // Don't apply percentage formatter when there's no source data\n if (!hasSourceData) return config\n\n if (!percentFormatterRef.current) {\n const locale = widget?.locale\n percentFormatterRef.current = (value: number) =>\n new Intl.NumberFormat(locale, {\n style: 'percent',\n minimumFractionDigits: 1,\n maximumFractionDigits: 1,\n }).format(value / 100)\n }\n return { ...config, formatter: percentFormatterRef.current, max: 100 }\n }\n\n // Not in relative mode — restore originals from store if captured.\n // Use `in` because originalFormatter may have been captured as undefined\n // (widget had no formatter before toggling relative on).\n percentFormatterRef.current = undefined\n if (widget != null && 'originalFormatter' in widget) {\n return {\n ...config,\n formatter: widget.originalFormatter,\n max: widget.originalMax,\n }\n }\n return config\n },\n })\n return () => {\n // Restore original formatter/max if unmounting while in relative mode\n const widget = widgetStoreActions.getWidget<RelativeDataState>(id)\n if (widget?.isRelative && 'originalFormatter' in widget) {\n widgetStoreActions.setWidget(id, {\n formatter: widget.originalFormatter,\n max: widget.originalMax,\n })\n }\n percentFormatterRef.current = undefined\n widgetStoreActions.unregisterTool(id, RELATIVE_DATA_CONFIG_TOOL_ID)\n }\n }, [id, order, defaultIsRelative])\n\n const handleToggle = useCallback(() => {\n const newIsRelative = !isRelative\n percentFormatterRef.current = undefined\n\n if (newIsRelative) {\n // Capture current formatter/max in store before switching to relative\n const widget = widgetStoreActions.getWidget(id)\n widgetStoreActions.setWidget(id, {\n isRelative: true,\n originalFormatter: widget?.formatter,\n originalMax: (widget as unknown as Record<string, unknown>)?.max,\n })\n } else {\n widgetStoreActions.setWidget(id, { isRelative: false })\n }\n }, [isRelative, id])\n\n const tooltipLabel = isRelative\n ? (labels?.absolute ?? 'Show absolute values')\n : (labels?.relative ?? 'Show relative values')\n\n return (\n <Tooltip title={tooltipLabel}>\n <IconButton\n size='small'\n aria-label={labels?.ariaLabel ?? tooltipLabel}\n onClick={handleToggle}\n sx={actionButtonStyles.trigger}\n data-active={isRelative}\n {...IconButtonProps}\n >\n {Icon ?? <PercentOutlined />}\n </IconButton>\n </Tooltip>\n )\n}\n","import type { SxProps, Theme } from '@mui/material'\n\nexport const styles = {\n container: {\n display: 'flex',\n alignItems: 'center',\n gap: ({ spacing }) => spacing(0.25),\n },\n trigger: {\n '&[data-active=\"true\"]': {\n background: (theme: Theme) => theme.palette.primary.relatedLight,\n },\n },\n} satisfies Record<string, SxProps<Theme>>\n","import { Box, IconButton, useTheme } from '@mui/material'\nimport {\n SubdirectoryArrowLeftOutlined,\n ZoomInOutlined,\n} from '@mui/icons-material'\nimport { useEffect, useCallback } from 'react'\nimport { widgetStoreActions } from '../../stores/widget-store'\nimport type { ZoomToggleProps, ZoomState } from './types'\nimport { styles } from './style'\nimport { Tooltip } from '../../../components'\nimport { getEChartZoomConfig } from '../../echart/utils'\nimport type { EchartOptionsProps } from '../../echart/types'\nimport { useWidgetSelector } from '../../stores/use-widget-selector'\n\nexport const ZOOM_TOGGLE_TOOL_ID = 'zoom-toggle'\n\n/**\n * Widget action to toggle EChart zoom functionality.\n *\n * Registers as a config pipeline tool so that zoom configuration is automatically\n * re-applied when the base config is updated (e.g., by WidgetLoader).\n *\n * Zoom state (enabled, range) is stored in the widget store root, and the tool\n * derives its `enabled` flag from the store. This keeps state accessible across\n * component instances.\n *\n * When zoom is active, displays an inline reset button to disable zoom.\n * Only intended for use in fullscreen ToolbarActions for bar and histogram widgets.\n *\n * @example\n * ```tsx\n * <ZoomToggle\n * id=\"my-widget\"\n * defaultZoom={false}\n * zoomStart={0}\n * zoomEnd={100}\n * />\n * ```\n */\nexport function ZoomToggle({\n id,\n defaultZoom = false,\n defaultZoomStart = 0,\n defaultZoomEnd = 100,\n labels,\n Icon,\n ResetIcon,\n IconButtonProps,\n}: ZoomToggleProps) {\n const theme = useTheme()\n\n // Read zoom state from widget store root — single source of truth\n const { zoom, zoomStart, zoomEnd } = useWidgetSelector(id, (w) => ({\n zoom: (w as ZoomState | undefined)?.zoom ?? defaultZoom,\n zoomStart: (w as ZoomState | undefined)?.zoomStart ?? defaultZoomStart,\n zoomEnd: (w as ZoomState | undefined)?.zoomEnd ?? defaultZoomEnd,\n }))\n\n // Initialize store with default values on mount\n useEffect(() => {\n const current = widgetStoreActions.getWidget<ZoomState>(id)\n if (current?.zoom === undefined) {\n widgetStoreActions.setWidget(id, {\n zoom: defaultZoom,\n zoomStart: defaultZoomStart,\n zoomEnd: defaultZoomEnd,\n })\n }\n }, [id, defaultZoom, defaultZoomStart, defaultZoomEnd])\n\n // Handle dataZoom event — update store (source of truth)\n const handleDataZoom = useCallback(\n (event: unknown) => {\n const zoomEvent = event as {\n start?: number\n end?: number\n batch?: {\n start?: number\n end?: number\n }[]\n }\n\n const start = zoomEvent.start ?? zoomEvent.batch?.[0]?.start\n const end = zoomEvent.end ?? zoomEvent.batch?.[0]?.end\n\n if (start !== undefined && end !== undefined) {\n widgetStoreActions.setWidget(id, {\n zoom: true,\n zoomStart: start,\n zoomEnd: end,\n })\n }\n },\n [id],\n )\n\n // Register config tool once — fn reads zoom range from the store at execution time.\n useEffect(() => {\n widgetStoreActions.registerTool(id, {\n id: ZOOM_TOGGLE_TOOL_ID,\n type: 'config',\n order: 20,\n enabled: defaultZoom,\n fn: (currentConfig) => {\n const config = currentConfig as Record<string, unknown>\n const option = config.option as EchartOptionsProps | undefined\n const currentOnEvents =\n (config.onEvents as Record<string, unknown> | undefined) ?? {}\n\n const widget = widgetStoreActions.getWidget<ZoomState>(id)\n const start = widget?.zoomStart ?? 0\n const end = widget?.zoomEnd ?? 100\n\n const legend = option?.legend as { show?: boolean } | undefined\n const hasLegend = legend?.show !== false && legend !== undefined\n\n const sliderHeight = parseInt(theme?.spacing?.(4) ?? '32')\n const sliderGap = 8\n const legendBottomOffset = hasLegend ? 28 : 0\n\n const zoomConfig = getEChartZoomConfig(\n { start, end },\n {\n inside: true,\n xSlider: true,\n ySlider: false,\n bottomOffset: legendBottomOffset,\n },\n theme,\n )\n\n const grid = option?.grid as { bottom?: number | string } | undefined\n const currentGridBottom =\n typeof grid?.bottom === 'number'\n ? grid.bottom\n : parseInt(grid?.bottom ?? '24')\n\n const gridBottom = currentGridBottom + sliderHeight + sliderGap\n\n const onEvents = { ...currentOnEvents, dataZoom: handleDataZoom }\n\n return {\n ...config,\n option: {\n ...option,\n ...zoomConfig,\n grid: { ...grid, bottom: gridBottom },\n },\n onEvents,\n }\n },\n })\n return () => widgetStoreActions.unregisterTool(id, ZOOM_TOGGLE_TOOL_ID)\n }, [id, theme, handleDataZoom, defaultZoom, defaultZoomStart, defaultZoomEnd])\n\n // Sync enabled from store — lightweight, no re-registration\n useEffect(() => {\n widgetStoreActions.setToolEnabled(id, ZOOM_TOGGLE_TOOL_ID, zoom)\n }, [id, zoom])\n\n // Trigger pipeline when zoom range changes — fn reads from store at execution time,\n // but the pipeline only re-runs when registeredTools reference changes.\n // setToolEnabled handles the zoom on/off case, this handles range-only changes.\n useEffect(() => {\n widgetStoreActions.triggerToolPipeline(id)\n }, [id, zoomStart, zoomEnd])\n\n const handleToggle = () => {\n const newZoom = !zoom\n widgetStoreActions.setWidget(id, {\n zoom: newZoom,\n zoomStart: newZoom ? zoomStart : 0,\n zoomEnd: newZoom ? zoomEnd : 100,\n })\n }\n\n const handleReset = () => {\n widgetStoreActions.setWidget(id, {\n zoom: true,\n zoomStart: defaultZoomStart,\n zoomEnd: defaultZoomEnd,\n })\n }\n\n const enableLabel = labels?.enable ?? 'Enable zoom'\n const disableLabel = labels?.disable ?? 'Disable zoom'\n const resetLabel = labels?.reset ?? 'Reset zoom'\n const tooltipLabel = zoom ? disableLabel : enableLabel\n\n return (\n <Box sx={styles.container}>\n <Tooltip title={tooltipLabel}>\n <IconButton\n size='small'\n aria-label={labels?.ariaLabel ?? tooltipLabel}\n onClick={handleToggle}\n sx={styles.trigger}\n data-active={zoom}\n {...IconButtonProps}\n >\n {Icon ?? <ZoomInOutlined />}\n </IconButton>\n </Tooltip>\n {zoom && (\n <Tooltip title={resetLabel}>\n <IconButton\n size='small'\n aria-label={resetLabel}\n onClick={handleReset}\n {...IconButtonProps}\n >\n {ResetIcon ?? <SubdirectoryArrowLeftOutlined />}\n </IconButton>\n </Tooltip>\n )}\n </Box>\n )\n}\n","export const GroupedBarChartIcon = () => (\n <svg\n width='24'\n height='24'\n viewBox='0 0 24 24'\n fill='none'\n xmlns='http://www.w3.org/2000/svg'\n >\n <path\n d='M4 20V8H8V20H4ZM9 20V13H13V20H9ZM16 20V4H20V20H16Z'\n fill='currentColor'\n />\n </svg>\n)\n","import { IconButton } from '@mui/material'\nimport { useCallback, useEffect, useMemo } from 'react'\nimport { widgetStoreActions } from '../../stores/widget-store'\nimport type { StackToggleProps, StackToggleState } from './types'\nimport { actionButtonStyles } from '../shared/styles'\nimport { Tooltip } from '../../../components'\nimport { GroupedBarChartIcon } from './grouped-bar-chart-icon'\nimport { getEChartStackConfig } from '../../echart/utils'\nimport { DEFAULT_STACK_GROUP } from '../../echart/const'\nimport type { EchartWidgetState } from '../../echart/types'\nimport type { EchartOptionsProps } from '../../echart/types'\nimport { useWidgetSelector } from '../../stores/use-widget-selector'\n\nexport const STACK_TOGGLE_TOOL_ID = 'stack-toggle'\n\n/**\n * Widget action to toggle stacking behavior in ECharts bar and histogram widgets.\n *\n * Registers as a config pipeline tool so that stack configuration is automatically\n * re-applied when the base config is updated (e.g., by WidgetLoader).\n *\n * @example\n * ```tsx\n * <StackToggle\n * id=\"my-widget\"\n * defaultIsStacked={false}\n * />\n * ```\n */\nexport function StackToggle({\n id,\n defaultIsStacked = false,\n labels,\n Icon,\n IconButtonProps,\n}: StackToggleProps) {\n const { storeIsStacked, option } = useWidgetSelector(id, (w) => ({\n storeIsStacked: (w as StackToggleState | undefined)?.isStacked,\n option: (w as EchartWidgetState | undefined)?.option,\n }))\n\n const { hasMultiSeries, hasStackInSeries } = useMemo(() => {\n if (!option) return { hasMultiSeries: false, hasStackInSeries: false }\n const series = Array.isArray(option.series)\n ? option.series\n : [option.series]\n return {\n hasMultiSeries: series.length > 1,\n hasStackInSeries: series.some((s) => (s as { stack?: string })?.stack),\n }\n }, [option])\n\n // If series already has stack defined, default to stacked=true\n const effectiveDefaultIsStacked = hasStackInSeries || defaultIsStacked\n const isStacked = storeIsStacked ?? effectiveDefaultIsStacked\n\n // Register config tool once — fn has no closure deps\n useEffect(() => {\n widgetStoreActions.registerTool(id, {\n id: STACK_TOGGLE_TOOL_ID,\n type: 'config',\n order: 10,\n enabled: false,\n fn: (currentConfig: unknown) => {\n const config = currentConfig as Record<string, unknown>\n const option = config.option as EchartOptionsProps | undefined\n if (!option) return currentConfig\n\n const series = Array.isArray(option.series)\n ? option.series\n : [option.series]\n const updatedSeries = series.map((s) => {\n const existingStack = (s as { stack?: string })?.stack\n const stackGroup =\n typeof existingStack === 'string'\n ? existingStack\n : DEFAULT_STACK_GROUP\n return { ...s, ...getEChartStackConfig(stackGroup) }\n })\n\n return { ...config, option: { ...option, series: updatedSeries } }\n },\n })\n return () => widgetStoreActions.unregisterTool(id, STACK_TOGGLE_TOOL_ID)\n }, [id])\n\n // Sync enabled from store — lightweight, no re-registration\n useEffect(() => {\n widgetStoreActions.setToolEnabled(\n id,\n STACK_TOGGLE_TOOL_ID,\n isStacked && hasMultiSeries,\n )\n }, [id, isStacked, hasMultiSeries])\n\n // Initialize store with default value only if not already configured\n useEffect(() => {\n if (storeIsStacked !== undefined) return\n widgetStoreActions.setWidget(id, { isStacked: effectiveDefaultIsStacked })\n }, [effectiveDefaultIsStacked, id, storeIsStacked])\n\n const handleToggle = useCallback(() => {\n widgetStoreActions.setWidget(id, { isStacked: !isStacked })\n }, [isStacked, id])\n\n const tooltipLabel = isStacked\n ? (labels?.unstacked ?? 'Disable stacking')\n : (labels?.stacked ?? 'Enable stacking')\n\n // Early return if there's only one series - stacking doesn't apply\n if (!hasMultiSeries) {\n return null\n }\n\n return (\n <Tooltip title={tooltipLabel}>\n <IconButton\n size='small'\n aria-label={labels?.ariaLabel ?? tooltipLabel}\n onClick={handleToggle}\n sx={actionButtonStyles.trigger}\n data-active={isStacked}\n {...IconButtonProps}\n >\n {Icon ?? <GroupedBarChartIcon />}\n </IconButton>\n </Tooltip>\n )\n}\n","import { IconButton } from '@mui/material'\nimport { CheckBoxOutlined } from '@mui/icons-material'\nimport { useCallback, useEffect } from 'react'\nimport type { LockSelectionProps, LockSelectionState } from './types'\nimport { actionButtonStyles } from '../shared/styles'\nimport { Tooltip } from '../../../components'\nimport { widgetStoreActions } from '../../stores/widget-store'\nimport { useWidgetSelector } from '../../stores/use-widget-selector'\nimport type { EchartWidgetData } from '../../echart/types'\n\nexport const LOCK_SELECTION_TOOL_ID = 'lock-selection'\n\n/**\n * Widget action button to lock the current selection.\n *\n * When locked, the widget data is filtered to only show the selected items.\n * The button is only visible when there are selected items.\n * Registers a transformation tool in the widget pipeline when mounted.\n *\n * @example\n * ```tsx\n * <LockSelection\n * id=\"my-widget\"\n * order={30}\n * selectedItems={selectedItems}\n * />\n * ```\n */\nexport function LockSelection({\n id,\n selectedItems,\n order = 30,\n labels,\n Icon,\n IconButtonProps,\n}: LockSelectionProps) {\n const { storeIsLocked } = useWidgetSelector(id, (w) => ({\n storeIsLocked: (w as LockSelectionState | undefined)?.isLocked,\n }))\n\n const isLocked = storeIsLocked ?? false\n\n // Register tool once — fn reads lockedItems from the store at execution time\n useEffect(() => {\n widgetStoreActions.registerTool(id, {\n id: LOCK_SELECTION_TOOL_ID,\n order,\n enabled: false,\n fn: (data) => {\n const widget = widgetStoreActions.getWidget<LockSelectionState>(id)\n const items = widget?.lockedItems ?? []\n if (items.length === 0) return data\n\n return filterDataByLockedItems(data as EchartWidgetData, items)\n },\n })\n\n return () => widgetStoreActions.unregisterTool(id, LOCK_SELECTION_TOOL_ID)\n }, [id, order])\n\n // Sync enabled from store — lightweight, no re-registration.\n // When selectedItems is empty (e.g., remount with no active selection),\n // disable the tool and clear stale lock state.\n useEffect(() => {\n if (isLocked && selectedItems.length === 0) {\n widgetStoreActions.setWidget(id, { isLocked: false, lockedItems: [] })\n return\n }\n widgetStoreActions.setToolEnabled(id, LOCK_SELECTION_TOOL_ID, isLocked)\n }, [id, isLocked, selectedItems.length])\n\n const handleToggle = useCallback(() => {\n if (isLocked) {\n // Unlock: clear locked items and disable tool\n widgetStoreActions.setWidget(id, {\n isLocked: false,\n lockedItems: [],\n })\n } else {\n // Lock: save selected items and enable tool\n widgetStoreActions.setWidget(id, {\n isLocked: true,\n lockedItems: selectedItems,\n })\n }\n }, [id, isLocked, selectedItems])\n\n // Don't render if no selections\n if (selectedItems.length === 0) {\n return null\n }\n\n const tooltipLabel = isLocked\n ? (labels?.unlock ?? 'Unlock selection')\n : (labels?.lock ?? 'Lock selection')\n\n const ariaLabel = labels?.ariaLabel ?? tooltipLabel\n\n return (\n <Tooltip title={tooltipLabel}>\n <IconButton\n size='small'\n aria-label={ariaLabel}\n onClick={handleToggle}\n sx={actionButtonStyles.trigger}\n data-active={isLocked}\n {...IconButtonProps}\n >\n {Icon ?? <CheckBoxOutlined fontSize='small' />}\n </IconButton>\n </Tooltip>\n )\n}\n\n/**\n * Filters widget data to only include items with names matching the locked items.\n */\nfunction filterDataByLockedItems(\n data: EchartWidgetData,\n lockedItems: string[],\n): EchartWidgetData {\n return data.map((series) =>\n series.filter((item) => {\n const name = item.name\n return typeof name === 'string' && lockedItems.includes(name)\n }),\n )\n}\n","import { TextField, InputAdornment, IconButton } from '@mui/material'\nimport { ClearOutlined, SearchOutlined } from '@mui/icons-material'\nimport { useEffect, useRef, useCallback } from 'react'\nimport { widgetStoreActions } from '../../stores/widget-store'\nimport { useWidgetSelector } from '../../stores/use-widget-selector'\nimport type { SearcherProps, SearcherFilterFn, SearcherState } from './types'\nimport type { EchartWidgetData } from '../../echart/types'\nimport { LOCK_SELECTION_TOOL_ID } from '../lock-selection/lock-selection'\n\nexport const SEARCHER_TOOL_ID = 'searcher'\n\nconst DEBOUNCE_DELAY = 300\n\n/**\n * Search input component that works with SearcherToggle.\n *\n * Registers a transformation tool in the widget pipeline when mounted.\n * Reads the enabled state from the widget store using the provided id.\n * Uses a debounced search to filter data via the transformation pipeline.\n * Auto-focuses when enabled becomes true.\n *\n * @example\n * ```tsx\n * <SearcherToggle id=\"my-widget\" />\n * <Searcher\n * id=\"my-widget\"\n * order={10}\n * labels={{ placeholder: 'Search categories...' }}\n * />\n * ```\n */\nexport function Searcher({\n id,\n filterFn,\n order = 20,\n labels,\n TextFieldProps,\n ClearIcon,\n debounceDelay = DEBOUNCE_DELAY,\n}: SearcherProps) {\n const inputRef = useRef<HTMLInputElement>(null)\n const debounceTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n // Read enabled state and search text from widget store\n const { enabled, searchText } = useWidgetSelector(id, (w) => ({\n enabled: (w as SearcherState | undefined)?.isSearchEnabled ?? false,\n searchText: (w as SearcherState | undefined)?.searchText ?? '',\n }))\n const prevEnabledRef = useRef(enabled)\n\n const filter = filterFn ?? defaultFilterFn\n\n const setSearchText = useCallback(\n (text: string) => {\n widgetStoreActions.setWidget(id, { searchText: text })\n },\n [id],\n )\n\n // Register tool once — fn reads searchText from the store at execution time.\n // Enabled is synced separately to avoid full re-registration on toggle.\n useEffect(() => {\n widgetStoreActions.registerTool(id, {\n id: SEARCHER_TOOL_ID,\n order,\n enabled: false,\n fn: async (data) => {\n const widget = widgetStoreActions.getWidget<SearcherState>(id)\n const currentSearchText = widget?.searchText ?? ''\n\n // Execute filter (can be sync or async)\n const result = filter(data as EchartWidgetData, currentSearchText)\n\n // Return result directly (pipeline will handle Promise)\n return result\n },\n disables: [LOCK_SELECTION_TOOL_ID],\n })\n\n return () => widgetStoreActions.unregisterTool(id, SEARCHER_TOOL_ID)\n }, [id, order, filter])\n\n // Sync enabled from store — lightweight, no re-registration\n useEffect(() => {\n widgetStoreActions.setToolEnabled(id, SEARCHER_TOOL_ID, enabled)\n }, [id, enabled])\n\n // Trigger pipeline re-execution when search text changes (debounced).\n // The fn reads searchText from the store, so we just need to trigger the pipeline.\n const debouncedTriggerPipeline = useCallback(() => {\n if (debounceTimeoutRef.current) {\n clearTimeout(debounceTimeoutRef.current)\n }\n debounceTimeoutRef.current = setTimeout(() => {\n widgetStoreActions.triggerToolPipeline(id)\n }, debounceDelay)\n }, [id, debounceDelay])\n\n // Auto-focus when enabled becomes true\n useEffect(() => {\n // Transition from disabled to enabled - focus input\n if (enabled && !prevEnabledRef.current && inputRef.current) {\n inputRef.current.focus()\n }\n\n prevEnabledRef.current = enabled\n }, [enabled])\n\n // Cleanup debounce timeout on unmount\n useEffect(() => {\n return () => {\n if (debounceTimeoutRef.current) {\n clearTimeout(debounceTimeoutRef.current)\n }\n }\n }, [])\n\n const handleChange = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = event.target.value\n setSearchText(newValue)\n debouncedTriggerPipeline()\n },\n [debouncedTriggerPipeline, setSearchText],\n )\n\n const handleClear = useCallback(() => {\n setSearchText('')\n widgetStoreActions.triggerToolPipeline(id)\n if (inputRef.current) {\n inputRef.current.focus()\n }\n }, [id, setSearchText])\n\n if (!enabled) {\n return null\n }\n\n const placeholder = labels?.placeholder ?? 'Search...'\n const clearAriaLabel = labels?.clearAriaLabel ?? 'Clear search'\n\n return (\n <TextField\n inputRef={inputRef}\n size='small'\n fullWidth\n variant='filled'\n placeholder={placeholder}\n value={searchText}\n onChange={handleChange}\n InputProps={{\n startAdornment: (\n <InputAdornment position='start'>\n <SearchOutlined />\n </InputAdornment>\n ),\n endAdornment: searchText ? (\n <InputAdornment position='end'>\n <IconButton\n size='small'\n aria-label={clearAriaLabel}\n onClick={handleClear}\n edge='end'\n >\n {ClearIcon ?? <ClearOutlined fontSize='small' />}\n </IconButton>\n </InputAdornment>\n ) : null,\n }}\n {...TextFieldProps}\n />\n )\n}\n\n/**\n * Default filter function that searches all string fields case-insensitively.\n * Note: Should be synchronous for the new pipeline architecture.\n */\nconst defaultFilterFn: SearcherFilterFn = (\n data: EchartWidgetData,\n searchText: string,\n) => {\n if (!searchText.trim()) return Promise.resolve(data)\n\n const lowerSearch = searchText.toLowerCase()\n\n return Promise.resolve(\n data.map((series) =>\n series.filter((item) =>\n Object.values(item).some((value) =>\n String(value).toLowerCase().includes(lowerSearch),\n ),\n ),\n ),\n )\n}\n","import { IconButton } from '@mui/material'\nimport { SearchOutlined } from '@mui/icons-material'\nimport { useCallback, useEffect } from 'react'\nimport type { SearcherToggleProps, SearcherState } from './types'\nimport { actionButtonStyles } from '../shared/styles'\nimport { Tooltip } from '../../../components'\nimport { widgetStoreActions } from '../../stores/widget-store'\nimport { useWidgetSelector } from '../../stores/use-widget-selector'\n\n/**\n * Widget action button to toggle search functionality.\n *\n * Stores the enabled state in the widget store using the provided id.\n * When search is active, the button shows an active state with a light background.\n * Use in conjunction with the Searcher component to display the search input.\n *\n * @example\n * ```tsx\n * <SearcherToggle id=\"my-widget\" />\n * <Searcher\n * id=\"my-widget\"\n * data={widgetData}\n * />\n * ```\n */\nexport function SearcherToggle({\n id,\n defaultEnabled = false,\n labels,\n Icon,\n IconButtonProps,\n}: SearcherToggleProps) {\n const { storeIsEnabled } = useWidgetSelector(id, (w) => ({\n storeIsEnabled: (w as SearcherState | undefined)?.isSearchEnabled,\n }))\n\n const isEnabled = storeIsEnabled ?? defaultEnabled\n\n // Initialize store with default value on mount\n useEffect(() => {\n const currentValue =\n widgetStoreActions.getWidget<SearcherState>(id)?.isSearchEnabled\n if (currentValue === undefined) {\n widgetStoreActions.setWidget(id, { isSearchEnabled: defaultEnabled })\n }\n }, [defaultEnabled, id])\n\n const handleToggle = useCallback(() => {\n widgetStoreActions.setWidget(id, { isSearchEnabled: !isEnabled })\n }, [id, isEnabled])\n\n const tooltipLabel = isEnabled\n ? (labels?.disable ?? 'Disable search')\n : (labels?.enable ?? 'Enable search')\n\n const ariaLabel = labels?.ariaLabel ?? tooltipLabel\n\n return (\n <Tooltip title={tooltipLabel}>\n <IconButton\n size='small'\n aria-label={ariaLabel}\n onClick={handleToggle}\n sx={actionButtonStyles.trigger}\n data-active={isEnabled}\n {...IconButtonProps}\n >\n {Icon ?? <SearchOutlined fontSize='small' />}\n </IconButton>\n </Tooltip>\n )\n}\n","export const ChangeColumnIcon = () => (\n <svg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 18 18'>\n <path\n fill='currentColor'\n fillRule='evenodd'\n d='M14.25 2.25H3.75c-.825 0-1.5.675-1.5 1.5v10.5c0 .825.675 1.5 1.5 1.5h10.5c.825 0 1.5-.675 1.5-1.5V3.75c0-.825-.675-1.5-1.5-1.5m-3.75 12h-3V3.75h3zM3.75 3.75H6v10.5H3.75zM12 14.25V3.75h2.25v10.5z'\n clipRule='evenodd'\n />\n </svg>\n)\n","import { useSortable } from '@dnd-kit/sortable'\nimport { CSS } from '@dnd-kit/utilities'\nimport { ListItemText, MenuItem } from '@mui/material'\nimport type { TableColumn } from '../../table/types'\n\nexport interface SortableColumnItemProps {\n column: TableColumn\n}\n\n/**\n * A draggable menu item for column reordering.\n * Uses @dnd-kit/sortable for drag-and-drop functionality.\n */\nexport function SortableColumnItem({ column }: SortableColumnItemProps) {\n const {\n attributes,\n listeners,\n setNodeRef,\n transform,\n transition,\n isDragging,\n } = useSortable({ id: column.id })\n\n const style = {\n transform: CSS.Transform.toString(\n transform ? { ...transform, x: 0 } : null,\n ),\n transition,\n opacity: isDragging ? 0.5 : 1,\n cursor: isDragging ? 'grabbing' : 'grab',\n }\n\n return (\n <MenuItem\n ref={setNodeRef}\n style={style}\n {...attributes}\n {...listeners}\n role='menuitem'\n tabIndex={0}\n sx={{\n '&:focus-visible': {\n outline: (theme) => `2px solid ${theme.palette.primary.main}`,\n outlineOffset: -2,\n },\n }}\n >\n <ListItemText>{column.label}</ListItemText>\n </MenuItem>\n )\n}\n","import {\n DndContext,\n closestCenter,\n KeyboardSensor,\n PointerSensor,\n useSensor,\n useSensors,\n type DragEndEvent,\n} from '@dnd-kit/core'\nimport {\n arrayMove,\n SortableContext,\n sortableKeyboardCoordinates,\n verticalListSortingStrategy,\n} from '@dnd-kit/sortable'\nimport { IconButton, Menu, SvgIcon } from '@mui/material'\nimport {\n useCallback,\n useEffect,\n useMemo,\n useState,\n type MouseEvent,\n} from 'react'\nimport { widgetStoreActions } from '../../stores/widget-store'\nimport type { ChangeColumnProps } from './types'\nimport { actionButtonStyles } from '../shared/styles'\nimport { Tooltip } from '../../../components'\nimport type { TableColumn, TableWidgetState } from '../../table/types'\nimport { ChangeColumnIcon } from './change-column-icon'\nimport { SortableColumnItem } from './sortable-column-item'\nimport { useWidgetSelector } from '../../stores/use-widget-selector'\n\nexport const CHANGE_COLUMN_TOOL_ID = 'change-column'\n\n/**\n * Widget action to reorder columns in a table widget via drag-and-drop.\n *\n * This action reads the columns from the widget store and allows users to\n * drag and drop columns to reorder them. All columns are displayed and\n * can be reordered.\n *\n * Registers as a config pipeline tool so that column order is automatically\n * re-applied when the base config is updated (e.g., by WidgetLoader).\n *\n * Returns null if there are fewer than 2 columns.\n *\n * @example\n * ```tsx\n * <ChangeColumn id=\"my-table-widget\" />\n * ```\n */\nexport function ChangeColumn({\n id,\n labels,\n Icon,\n IconButtonProps,\n MenuProps,\n}: ChangeColumnProps) {\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null)\n const { columns } = useWidgetSelector(id, (w) => ({\n columns: (w as TableWidgetState | undefined)?.columns,\n }))\n\n /**\n * Config tool function that reorders columns to match the current widget state.\n * Reads desired order from the widget store (set by handleDragEnd via setWidget).\n * Preserves referential identity when the order already matches to prevent\n * re-render loops in the config pipeline.\n */\n const reorderFn = useCallback(\n (currentConfig: unknown): unknown => {\n const widgetState = widgetStoreActions.getWidget<TableWidgetState>(id)\n const currentColumns = widgetState?.columns\n if (!currentColumns || currentColumns.length === 0) return currentConfig\n\n const config = currentConfig as Record<string, unknown>\n const configColumns = config.columns as TableColumn[] | undefined\n if (!configColumns || configColumns.length === 0) return currentConfig\n\n // Check if config columns are already in the same order as widget columns\n const alreadyMatches =\n configColumns.length === currentColumns.length &&\n configColumns.every((col, i) => col.id === currentColumns[i]?.id)\n if (alreadyMatches) return currentConfig\n\n // Reorder config columns to match widget column order\n const columnMap = new Map(configColumns.map((col) => [col.id, col]))\n const reordered: TableColumn[] = []\n\n for (const widgetCol of currentColumns) {\n const col = columnMap.get(widgetCol.id)\n if (col) {\n reordered.push(col)\n columnMap.delete(widgetCol.id)\n }\n }\n\n // Append any new columns not in the widget order\n for (const col of columnMap.values()) {\n reordered.push(col)\n }\n\n // If result matches current widget columns, reuse the same array reference\n // to prevent downstream subscribers from detecting a change\n const matchesWidget =\n reordered.length === currentColumns.length &&\n reordered.every((col, i) => col.id === currentColumns[i]?.id)\n\n return { ...config, columns: matchesWidget ? currentColumns : reordered }\n },\n [id],\n )\n\n const sensors = useSensors(\n useSensor(PointerSensor),\n useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates,\n }),\n )\n\n const columnIds = useMemo(\n () => columns?.map((col) => col.id) ?? [],\n [columns],\n )\n\n // Register config tool on mount\n useEffect(() => {\n widgetStoreActions.registerTool(id, {\n id: CHANGE_COLUMN_TOOL_ID,\n type: 'config',\n order: 100,\n enabled: true,\n fn: reorderFn,\n })\n return () => widgetStoreActions.unregisterTool(id, CHANGE_COLUMN_TOOL_ID)\n }, [id, reorderFn])\n\n const handleToggle = useCallback((event: MouseEvent<HTMLElement>) => {\n event.stopPropagation()\n setAnchorEl(event.currentTarget)\n }, [])\n\n const handleClose = useCallback(() => {\n setAnchorEl(null)\n }, [])\n\n const handleDragEnd = (event: DragEndEvent) => {\n const { active, over } = event\n if (!over || active.id === over.id || !columns) return\n const oldIndex = columns.findIndex((col) => col.id === active.id)\n const newIndex = columns.findIndex((col) => col.id === over.id)\n if (oldIndex !== -1 && newIndex !== -1) {\n const newColumns = arrayMove(columns, oldIndex, newIndex)\n widgetStoreActions.setWidget(id, { columns: newColumns })\n }\n }\n\n // Return null if there are fewer than 2 columns\n if (!columns || columns.length < 2) {\n return null\n }\n\n const tooltipLabel = labels?.tooltip ?? 'Change column'\n const isOpen = Boolean(anchorEl)\n\n return (\n <>\n <Tooltip title={tooltipLabel}>\n <IconButton\n size='small'\n aria-label={labels?.ariaLabel ?? tooltipLabel}\n aria-controls={isOpen ? 'change-column-menu' : undefined}\n aria-haspopup='true'\n aria-expanded={isOpen ? 'true' : undefined}\n onClick={handleToggle}\n data-active={isOpen}\n sx={actionButtonStyles.trigger}\n {...IconButtonProps}\n >\n {Icon ?? (\n <SvgIcon>\n <ChangeColumnIcon />\n </SvgIcon>\n )}\n </IconButton>\n </Tooltip>\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragEnd={handleDragEnd}\n >\n <Menu\n id='change-column-menu'\n anchorEl={anchorEl}\n open={isOpen}\n onClose={handleClose}\n anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}\n transformOrigin={{ vertical: 'top', horizontal: 'right' }}\n slotProps={{\n paper: {\n sx: { overflow: 'hidden' },\n },\n }}\n {...MenuProps}\n >\n <SortableContext\n items={columnIds}\n strategy={verticalListSortingStrategy}\n >\n {columns.map((column) => (\n <SortableColumnItem key={column.id} column={column} />\n ))}\n </SortableContext>\n </Menu>\n </DndContext>\n </>\n )\n}\n","import type { SxProps, Theme } from '@mui/material'\n\nexport const styles = {\n container: {\n display: 'flex',\n alignItems: 'center',\n gap: ({ spacing }) => spacing(0.25),\n },\n trigger: {\n '&[data-active=\"true\"]': {\n background: (theme: Theme) => theme.palette.primary.relatedLight,\n },\n },\n} satisfies Record<string, SxProps<Theme>>\n","import { Box, IconButton } from '@mui/material'\nimport { HighlightAltOutlined } from '@mui/icons-material'\nimport { useEffect, useCallback, useRef } from 'react'\nimport { widgetStoreActions } from '../../stores/widget-store'\nimport type { BrushSelectedItems, BrushToggleProps, BrushState } from './types'\nimport { styles } from './style'\nimport { Tooltip } from '../../../components'\nimport { getEChartBrushConfig } from '../../echart/utils'\nimport type { EchartOptionsProps, EchartWidgetState } from '../../echart/types'\nimport { useWidgetSelector } from '../../stores/use-widget-selector'\n\nexport const BRUSH_TOGGLE_TOOL_ID = 'brush-toggle'\n\n/**\n * Widget action to toggle EChart brush selection functionality.\n *\n * Registers as a config pipeline tool so that brush configuration is automatically\n * re-applied when the base config is updated (e.g., by WidgetLoader).\n *\n * Brush state is stored in the widget store root, and the tool derives its\n * `enabled` flag from the store. This keeps state accessible across component instances.\n *\n * When brush is active, users can drag across bars to select a range.\n * Selection clearing is handled via the chart's brush interactions/toolbox configuration.\n * Only intended for use in fullscreen ToolbarActions for bar and histogram widgets.\n *\n * @example\n * ```tsx\n * <BrushToggle\n * id=\"my-widget\"\n * onBrushSelected={(items) => console.log(items)}\n * />\n * ```\n */\nexport function BrushToggle({\n id,\n onBrushSelected,\n labels,\n Icon,\n IconButtonProps,\n}: BrushToggleProps) {\n const selected = useRef<BrushSelectedItems>({ dataIndex: [], seriesIndex: 0 })\n\n // Read brush state from widget store root — single source of truth\n const { brush } = useWidgetSelector(id, (w) => ({\n brush: (w as BrushState | undefined)?.brush ?? false,\n }))\n\n const handleToggle = useCallback(() => {\n const newBrush = !brush\n widgetStoreActions.setWidget(id, { brush: newBrush })\n\n if (newBrush) {\n onBrushSelected?.({ dataIndex: [], seriesIndex: 0 }) // Clear selection when enabling brush\n }\n }, [brush, id, onBrushSelected])\n\n // Re-dispatch brush action after every ECharts render while brush is active\n useEffect(() => {\n if (!brush) return\n\n const instance =\n widgetStoreActions.getWidget<EchartWidgetState>(id)?.instance?.current\n if (!instance) return\n\n const handleRendered = () => {\n const config = getEChartBrushConfig()\n instance.dispatchAction({\n type: 'takeGlobalCursor',\n key: 'brush',\n brushOption: {\n brushType: config.brush.brushType,\n brushMode: config.brush.brushMode,\n },\n })\n }\n\n // Dispatch immediately for the initial activation\n handleRendered()\n\n // Re-dispatch after each render (covers setOption with notMerge:true)\n instance.on('rendered', handleRendered)\n\n return () => {\n instance.off('rendered', handleRendered)\n }\n }, [brush, id])\n\n // Handle brushSelected event to capture selected bar indices\n const handleBrushSelected = useCallback((event: unknown) => {\n const brushEvent = event as {\n batch?: {\n selected?: {\n dataIndex?: number[]\n seriesIndex?: number\n }[]\n }[]\n }\n\n const allSelected =\n brushEvent.batch?.flatMap((batchItem) => batchItem.selected ?? []) ?? []\n\n if (!allSelected.length) {\n selected.current = {\n dataIndex: [],\n seriesIndex: 0,\n }\n return\n }\n\n // Use the first seriesIndex as the primary one (matches previous behavior)\n const primarySeriesIndex = allSelected[0]?.seriesIndex ?? 0\n\n const mergedDataIndex = Array.from(\n new Set(\n allSelected\n .filter(\n (item) =>\n item.seriesIndex === undefined ||\n item.seriesIndex === primarySeriesIndex,\n )\n .flatMap((item) => item.dataIndex ?? []),\n ),\n )\n\n selected.current = {\n dataIndex: mergedDataIndex,\n seriesIndex: primarySeriesIndex,\n }\n }, [])\n\n const handleBrushEnd = useCallback(() => {\n onBrushSelected?.(selected.current)\n widgetStoreActions.setWidget(id, { brush: false }) // Disable brush after selection is made\n }, [onBrushSelected, id])\n\n // Register config tool once — fn closure depends on event handlers.\n // Enabled is synced separately to avoid full re-registration on toggle.\n useEffect(() => {\n widgetStoreActions.registerTool(id, {\n id: BRUSH_TOGGLE_TOOL_ID,\n type: 'config',\n order: 25,\n enabled: false,\n fn: (currentConfig) => {\n const config = currentConfig as Record<string, unknown>\n const option = config.option as EchartOptionsProps | undefined\n const currentOnEvents =\n (config.onEvents as Record<string, unknown> | undefined) ?? {}\n\n const brushConfig = getEChartBrushConfig()\n\n const onEvents = {\n ...currentOnEvents,\n brushSelected: handleBrushSelected,\n brushEnd: handleBrushEnd,\n }\n\n return {\n ...config,\n option: {\n ...option,\n ...brushConfig,\n },\n onEvents,\n }\n },\n })\n return () => widgetStoreActions.unregisterTool(id, BRUSH_TOGGLE_TOOL_ID)\n }, [id, handleBrushSelected, handleBrushEnd])\n\n // Sync enabled from store — lightweight, no re-registration\n useEffect(() => {\n widgetStoreActions.setToolEnabled(id, BRUSH_TOGGLE_TOOL_ID, brush)\n }, [id, brush])\n\n const enableLabel = labels?.enable ?? 'Enable brush selection'\n const disableLabel = labels?.disable ?? 'Disable brush selection'\n const tooltipLabel = brush ? disableLabel : enableLabel\n\n return (\n <Box sx={styles.container}>\n <Tooltip title={tooltipLabel}>\n <IconButton\n size='small'\n aria-label={labels?.ariaLabel ?? tooltipLabel}\n onClick={handleToggle}\n sx={styles.trigger}\n data-active={brush}\n {...IconButtonProps}\n >\n {Icon ?? <HighlightAltOutlined />}\n </IconButton>\n </Tooltip>\n </Box>\n )\n}\n"],"names":["styles","title","container","display","alignItems","justifyContent","gap","content","flexDirection","spacing","EMPTY_DIALOG_CONTENT_PROPS","FullScreen","t0","$","_c","id","labels","children","Icon","IconButtonProps","DialogContentProps","t1","DialogProps","t2","undefined","sx","isFullScreen","useWidgetSelector","_temp","t3","updates","widgetStoreActions","setWidget","updateFullScreenConfig","t4","t5","FullscreenOutlined","t6","IconButton","t7","t8","ariaLabel","t9","t10","t11","Typography","t12","t13","Symbol","for","Close","t14","jsx","t15","DialogTitle","t16","t17","DialogContent","t18","Dialog","t19","w","EMPTY_LABELS","Download","items","data","isDownloading","setIsDownloading","useState","anchorEl","setAnchorEl","event","stopPropagation","currentTarget","handleToggle","data_0","option","link","document","createElement","href","download","filename","style","body","appendChild","click","removeChild","callback","handleDownload","event_0","option_0","result","modifier","handleClick","length","CircularProgress","FileDownloadOutlined","vertical","horizontal","Boolean","paddingBottom","option_1","jsxs","MenuItem","disabled","e","icon","ListItemIcon","color","ListItemText","label","map","Menu","actionButtonStyles","trigger","background","theme","palette","primary","relatedLight","calculateTotal","reduce","total","series","seriesTotal","item","Array","isArray","value","at","Object","entries","itemTotal","key","toRelativeData","index","transformed","RELATIVE_DATA_TOOL_ID","RELATIVE_DATA_CONFIG_TOOL_ID","RelativeData","order","defaultIsRelative","percentFormatterRef","useRef","isRelative","current","getWidget","originalFormatter","formatter","originalMax","max","useEffect","registerTool","enabled","fn","unregisterTool","setToolEnabled","type","currentConfig","config","widget","hasSourceData","sourceData","locale","Intl","NumberFormat","minimumFractionDigits","maximumFractionDigits","format","widget_0","newIsRelative","widget_1","tooltipLabel","absolute","relative","PercentOutlined","Tooltip","echartData","ZOOM_TOGGLE_TOOL_ID","ZoomToggle","defaultZoom","defaultZoomStart","defaultZoomEnd","ResetIcon","useTheme","zoom","zoomStart","zoomEnd","zoomEvent","start","batch","end","handleDataZoom","currentOnEvents","onEvents","start_0","end_0","legend","hasLegend","show","sliderHeight","parseInt","zoomConfig","getEChartZoomConfig","inside","xSlider","ySlider","bottomOffset","legendBottomOffset","grid","gridBottom","bottom","dataZoom","triggerToolPipeline","newZoom","handleReset","enableLabel","enable","disableLabel","disable","resetLabel","reset","ZoomInOutlined","t20","SubdirectoryArrowLeftOutlined","t21","Box","GroupedBarChartIcon","STACK_TOGGLE_TOOL_ID","StackToggle","defaultIsStacked","storeIsStacked","bb0","hasMultiSeries","hasStackInSeries","some","_temp2","effectiveDefaultIsStacked","isStacked","_temp4","unstacked","stacked","updatedSeries","_temp3","s_0","existingStack","s","stack","getEChartStackConfig","DEFAULT_STACK_GROUP","LOCK_SELECTION_TOOL_ID","LockSelection","selectedItems","storeIsLocked","isLocked","lockedItems","filterDataByLockedItems","unlock","lock","CheckBoxOutlined","filter","name","includes","SEARCHER_TOOL_ID","DEBOUNCE_DELAY","Searcher","filterFn","TextFieldProps","ClearIcon","debounceDelay","inputRef","debounceTimeoutRef","searchText","prevEnabledRef","defaultFilterFn","text","setSearchText","currentSearchText","disables","clearTimeout","setTimeout","debouncedTriggerPipeline","focus","newValue","target","handleChange","handleClear","placeholder","clearAriaLabel","InputAdornment","SearchOutlined","ClearOutlined","startAdornment","endAdornment","TextField","isSearchEnabled","trim","Promise","resolve","lowerSearch","toLowerCase","values","String","SearcherToggle","defaultEnabled","storeIsEnabled","isEnabled","ChangeColumnIcon","SortableColumnItem","column","attributes","listeners","setNodeRef","transform","transition","isDragging","useSortable","CSS","Transform","toString","x","opacity","cursor","outline","outlineOffset","main","CHANGE_COLUMN_TOOL_ID","ChangeColumn","MenuProps","columns","currentColumns","configColumns","every","col","i","columnMap","Map","reordered","widgetCol","col_1","get","push","delete","col_2","matchesWidget","col_3","i_0","reorderFn","coordinateGetter","sortableKeyboardCoordinates","sensors","useSensors","useSensor","PointerSensor","KeyboardSensor","columnIds","handleClose","active","over","oldIndex","findIndex","col_5","newIndex","col_6","newColumns","arrayMove","handleDragEnd","tooltip","isOpen","SvgIcon","paper","overflow","SortableContext","verticalListSortingStrategy","DndContext","closestCenter","t22","col_4","col_0","BRUSH_TOGGLE_TOOL_ID","BrushToggle","onBrushSelected","dataIndex","seriesIndex","selected","brush","newBrush","instance","handleRendered","getEChartBrushConfig","dispatchAction","brushOption","brushType","brushMode","on","off","allSelected","flatMap","primarySeriesIndex","mergedDataIndex","from","Set","handleBrushSelected","handleBrushEnd","config_0","brushConfig","brushSelected","brushEnd","HighlightAltOutlined","item_0","batchItem"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@carto/ps-react-ui",
3
- "version": "4.6.1",
3
+ "version": "4.6.2",
4
4
  "description": "CARTO's Professional Service React Material library",
5
5
  "type": "module",
6
6
  "devDependencies": {
@@ -406,6 +406,29 @@ describe('RelativeData', () => {
406
406
  expect(widget?.formatter).toBeUndefined()
407
407
  })
408
408
 
409
+ test('removes percentage formatter when defaultIsRelative=true and toggling to absolute', async () => {
410
+ // Widget starts with defaultIsRelative=true and no formatter
411
+ useWidgetStore.getState().setWidget(widgetId, { sourceData: mockData })
412
+
413
+ render(<RelativeData id={widgetId} defaultIsRelative />)
414
+
415
+ // Pipeline runs with isRelative=true — applies percentage formatter
416
+ await useWidgetStore.getState().executeConfigPipeline(widgetId, {})
417
+
418
+ let widget = useWidgetStore.getState().getWidget(widgetId)
419
+ expect(widget?.formatter).toBeDefined()
420
+ expect(typeof widget?.formatter).toBe('function')
421
+
422
+ // Toggle to absolute (first toggle is OFF when defaultIsRelative=true)
423
+ const button = screen.getByRole('button')
424
+ fireEvent.click(button)
425
+
426
+ await useWidgetStore.getState().executeConfigPipeline(widgetId, {})
427
+
428
+ widget = useWidgetStore.getState().getWidget(widgetId)
429
+ expect(widget?.formatter).toBeUndefined()
430
+ })
431
+
409
432
  test('stores originalFormatter/originalMax in widget root on toggle', () => {
410
433
  const customFormatter = (value: number) => `$${value}`
411
434
  useWidgetStore
@@ -50,11 +50,20 @@ export function RelativeData({
50
50
  (w as RelativeDataState | undefined)?.isRelative ?? defaultIsRelative,
51
51
  }))
52
52
 
53
- // Initialize store with default value on mount
53
+ // Initialize store with default value on mount.
54
+ // When defaultIsRelative=true, capture originals so toggling OFF can restore them.
54
55
  useEffect(() => {
55
56
  const current = widgetStoreActions.getWidget<RelativeDataState>(id)
56
57
  if (current?.isRelative === undefined) {
57
- widgetStoreActions.setWidget(id, { isRelative: defaultIsRelative })
58
+ if (defaultIsRelative) {
59
+ widgetStoreActions.setWidget(id, {
60
+ isRelative: true,
61
+ originalFormatter: current?.formatter,
62
+ originalMax: (current as unknown as Record<string, number>)?.max,
63
+ })
64
+ } else {
65
+ widgetStoreActions.setWidget(id, { isRelative: defaultIsRelative })
66
+ }
58
67
  }
59
68
  }, [id, defaultIsRelative])
60
69