@carto/ps-react-ui 4.3.0 → 4.3.1

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,3 +1,3 @@
1
1
  export { WidgetLoader } from './loader';
2
- export { mergeWidgetConfig } from './utils';
2
+ export { mergeWidgetConfig, resolveConfig, type ConfigOrFn } from './utils';
3
3
  export type { WidgetLoaderProps, ConfigProps } from './types';
@@ -1 +1,12 @@
1
+ /**
2
+ * Config can be either an object or a function that receives baseConfig and data
3
+ * and returns a partial config to be merged with the base.
4
+ */
5
+ export type ConfigOrFn<TConfig, TData = unknown> = Partial<TConfig> | ((baseConfig: TConfig, data: TData) => Partial<TConfig>);
6
+ /**
7
+ * Resolves a config that may be either an object or a function.
8
+ * If it's a function, calls it with baseConfig and data.
9
+ * If it's an object (or undefined), returns it as-is.
10
+ */
11
+ export declare function resolveConfig<TConfig, TData>(config: ConfigOrFn<TConfig, TData> | undefined, baseConfig: TConfig, data: TData): Partial<TConfig> | undefined;
1
12
  export declare function mergeWidgetConfig<T>(...options: [Partial<T> | undefined, Partial<T> | undefined]): T;
@@ -0,0 +1 @@
1
+ export {};
@@ -145,20 +145,20 @@ const d = {
145
145
  function G(t) {
146
146
  const e = M(6), {
147
147
  value: o,
148
- maxValue: i,
149
- color: l,
150
- selected: a
151
- } = t, s = a === void 0 ? !0 : a, r = i > 0 ? o / i * 100 : 0;
148
+ maxValue: a,
149
+ color: r,
150
+ selected: i
151
+ } = t, s = i === void 0 ? !0 : i, l = a > 0 ? o / a * 100 : 0;
152
152
  let u;
153
- e[0] !== l || e[1] !== r || e[2] !== s ? (u = s ? {
153
+ e[0] !== r || e[1] !== l || e[2] !== s ? (u = s ? {
154
154
  ...d.barFill,
155
- width: `${r}%`,
156
- backgroundColor: l
155
+ width: `${l}%`,
156
+ backgroundColor: r
157
157
  } : {
158
158
  ...d.barFill,
159
159
  ...d.barFillMuted,
160
- width: `${r}%`
161
- }, e[0] = l, e[1] = r, e[2] = s, e[3] = u) : u = e[3];
160
+ width: `${l}%`
161
+ }, e[0] = r, e[1] = l, e[2] = s, e[3] = u) : u = e[3];
162
162
  const n = u;
163
163
  let c;
164
164
  return e[4] !== n ? (c = /* @__PURE__ */ h(b, { sx: d.bar, children: /* @__PURE__ */ h(b, { sx: n }) }), e[4] = n, e[5] = c) : c = e[5], c;
@@ -166,22 +166,22 @@ function G(t) {
166
166
  function K(t) {
167
167
  const e = M(23), {
168
168
  name: o,
169
- value: i,
170
- maxValue: l,
171
- color: a,
169
+ value: a,
170
+ maxValue: r,
171
+ color: i,
172
172
  formatter: s,
173
- onClick: r,
173
+ onClick: l,
174
174
  selected: u
175
175
  } = t, n = u === void 0 ? !0 : u;
176
176
  let c;
177
- e[0] !== o || e[1] !== r ? (c = r ? () => r({
177
+ e[0] !== o || e[1] !== l ? (c = l ? () => l({
178
178
  name: o
179
- }) : void 0, e[0] = o, e[1] = r, e[2] = c) : c = e[2];
180
- const m = c, x = r ? d.rowClickable : d.row;
179
+ }) : void 0, e[0] = o, e[1] = l, e[2] = c) : c = e[2];
180
+ const m = c, x = l ? d.rowClickable : d.row;
181
181
  let y;
182
182
  e[3] !== o ? (y = /* @__PURE__ */ h(D, { sx: d.rowLabel, children: o }), e[3] = o, e[4] = y) : y = e[4];
183
183
  let f;
184
- e[5] !== s || e[6] !== i ? (f = s(i), e[5] = s, e[6] = i, e[7] = f) : f = e[7];
184
+ e[5] !== s || e[6] !== a ? (f = s(a), e[5] = s, e[6] = a, e[7] = f) : f = e[7];
185
185
  let C;
186
186
  e[8] !== f ? (C = /* @__PURE__ */ h(D, { sx: d.rowValue, children: f }), e[8] = f, e[9] = C) : C = e[9];
187
187
  let g;
@@ -190,7 +190,7 @@ function K(t) {
190
190
  C
191
191
  ] }), e[10] = y, e[11] = C, e[12] = g) : g = e[12];
192
192
  let p;
193
- e[13] !== a || e[14] !== l || e[15] !== n || e[16] !== i ? (p = /* @__PURE__ */ h(G, { value: i, maxValue: l, color: a, selected: n }), e[13] = a, e[14] = l, e[15] = n, e[16] = i, e[17] = p) : p = e[17];
193
+ e[13] !== i || e[14] !== r || e[15] !== n || e[16] !== a ? (p = /* @__PURE__ */ h(G, { value: a, maxValue: r, color: i, selected: n }), e[13] = i, e[14] = r, e[15] = n, e[16] = a, e[17] = p) : p = e[17];
194
194
  let w;
195
195
  return e[18] !== m || e[19] !== x || e[20] !== g || e[21] !== p ? (w = /* @__PURE__ */ S(b, { sx: x, onClick: m, children: [
196
196
  g,
@@ -200,27 +200,27 @@ function K(t) {
200
200
  function Q(t) {
201
201
  const e = M(25), {
202
202
  name: o,
203
- values: i,
204
- maxValue: l,
205
- colors: a,
203
+ values: a,
204
+ maxValue: r,
205
+ colors: i,
206
206
  formatter: s,
207
- onClick: r,
207
+ onClick: l,
208
208
  selected: u
209
209
  } = t, n = u === void 0 ? !0 : u;
210
210
  let c;
211
- e[0] !== o || e[1] !== r ? (c = r ? () => r({
211
+ e[0] !== o || e[1] !== l ? (c = l ? () => l({
212
212
  name: o
213
- }) : void 0, e[0] = o, e[1] = r, e[2] = c) : c = e[2];
214
- const m = c, x = r ? d.rowClickable : d.row;
213
+ }) : void 0, e[0] = o, e[1] = l, e[2] = c) : c = e[2];
214
+ const m = c, x = l ? d.rowClickable : d.row;
215
215
  let y;
216
216
  e[3] !== o ? (y = /* @__PURE__ */ h(D, { sx: d.rowLabel, children: o }), e[3] = o, e[4] = y) : y = e[4];
217
217
  let f;
218
- if (e[5] !== a || e[6] !== s || e[7] !== l || e[8] !== o || e[9] !== n || e[10] !== i) {
218
+ if (e[5] !== i || e[6] !== s || e[7] !== r || e[8] !== o || e[9] !== n || e[10] !== a) {
219
219
  let p;
220
- e[12] !== a || e[13] !== s || e[14] !== l || e[15] !== o || e[16] !== n ? (p = (w, k) => /* @__PURE__ */ S(b, { sx: d.multiBarRow, children: [
221
- /* @__PURE__ */ h(b, { sx: d.multiBarContainer, children: /* @__PURE__ */ h(G, { value: w, maxValue: l, color: a[k % a.length] ?? "", selected: n }) }),
220
+ e[12] !== i || e[13] !== s || e[14] !== r || e[15] !== o || e[16] !== n ? (p = (w, k) => /* @__PURE__ */ S(b, { sx: d.multiBarRow, children: [
221
+ /* @__PURE__ */ h(b, { sx: d.multiBarContainer, children: /* @__PURE__ */ h(G, { value: w, maxValue: r, color: i[k % i.length] ?? "", selected: n }) }),
222
222
  /* @__PURE__ */ h(D, { sx: d.multiBarValue, children: s(w) })
223
- ] }, `${o}-${w}-${k}`), e[12] = a, e[13] = s, e[14] = l, e[15] = o, e[16] = n, e[17] = p) : p = e[17], f = i.map(p), e[5] = a, e[6] = s, e[7] = l, e[8] = o, e[9] = n, e[10] = i, e[11] = f;
223
+ ] }, `${o}-${w}-${k}`), e[12] = i, e[13] = s, e[14] = r, e[15] = o, e[16] = n, e[17] = p) : p = e[17], f = a.map(p), e[5] = i, e[6] = s, e[7] = r, e[8] = o, e[9] = n, e[10] = a, e[11] = f;
224
224
  } else
225
225
  f = e[11];
226
226
  let C;
@@ -234,14 +234,14 @@ function Q(t) {
234
234
  function X(t) {
235
235
  const e = M(10), {
236
236
  hiddenCount: o,
237
- otherLabel: i,
238
- otherCountLabel: l
239
- } = t, a = i === void 0 ? "Other" : i, s = l === void 0 ? "{count} more" : l;
240
- let r;
241
- e[0] !== o || e[1] !== s ? (r = s.replace("{count}", String(o)), e[0] = o, e[1] = s, e[2] = r) : r = e[2];
242
- const u = r;
237
+ otherLabel: a,
238
+ otherCountLabel: r
239
+ } = t, i = a === void 0 ? "Other" : a, s = r === void 0 ? "{count} more" : r;
240
+ let l;
241
+ e[0] !== o || e[1] !== s ? (l = s.replace("{count}", String(o)), e[0] = o, e[1] = s, e[2] = l) : l = e[2];
242
+ const u = l;
243
243
  let n;
244
- e[3] !== a ? (n = /* @__PURE__ */ h(D, { sx: d.otherLabel, children: a }), e[3] = a, e[4] = n) : n = e[4];
244
+ e[3] !== i ? (n = /* @__PURE__ */ h(D, { sx: d.otherLabel, children: i }), e[3] = i, e[4] = n) : n = e[4];
245
245
  let c;
246
246
  e[5] !== u ? (c = /* @__PURE__ */ S(D, { sx: d.otherCount, children: [
247
247
  "(",
@@ -257,32 +257,32 @@ function X(t) {
257
257
  function Y(t) {
258
258
  const e = M(7), {
259
259
  series: o,
260
- colors: i
260
+ colors: a
261
261
  } = t;
262
262
  if (o.length === 0)
263
263
  return null;
264
- let l;
265
- if (e[0] !== i || e[1] !== o) {
264
+ let r;
265
+ if (e[0] !== a || e[1] !== o) {
266
266
  let s;
267
- e[3] !== i ? (s = (r, u) => /* @__PURE__ */ S(b, { sx: d.legendItem, children: [
267
+ e[3] !== a ? (s = (l, u) => /* @__PURE__ */ S(b, { sx: d.legendItem, children: [
268
268
  /* @__PURE__ */ h(b, { sx: {
269
269
  ...d.legendDot,
270
- backgroundColor: r.color ?? i[u % i.length]
270
+ backgroundColor: l.color ?? a[u % a.length]
271
271
  } }),
272
- /* @__PURE__ */ h(D, { sx: d.legendLabel, children: r.name })
273
- ] }, r.name), e[3] = i, e[4] = s) : s = e[4], l = o.map(s), e[0] = i, e[1] = o, e[2] = l;
272
+ /* @__PURE__ */ h(D, { sx: d.legendLabel, children: l.name })
273
+ ] }, l.name), e[3] = a, e[4] = s) : s = e[4], r = o.map(s), e[0] = a, e[1] = o, e[2] = r;
274
274
  } else
275
- l = e[2];
276
- let a;
277
- return e[5] !== l ? (a = /* @__PURE__ */ h(b, { sx: d.legend, children: l }), e[5] = l, e[6] = a) : a = e[6], a;
275
+ r = e[2];
276
+ let i;
277
+ return e[5] !== r ? (i = /* @__PURE__ */ h(b, { sx: d.legend, children: r }), e[5] = r, e[6] = i) : i = e[6], i;
278
278
  }
279
279
  const Z = (t) => t.toString();
280
280
  function ye(t) {
281
- const e = M(42), {
281
+ const e = M(41), {
282
282
  id: o
283
- } = t, i = N();
284
- let l;
285
- e[0] !== o ? (l = ($) => {
283
+ } = t, a = N();
284
+ let r;
285
+ e[0] !== o ? (r = ($) => {
286
286
  const v = $.getWidget(o);
287
287
  return {
288
288
  formatter: v?.formatter,
@@ -294,10 +294,10 @@ function ye(t) {
294
294
  selected: v?.selected,
295
295
  max: v?.max
296
296
  };
297
- }, e[0] = o, e[1] = l) : l = e[1];
298
- const a = U(z(l)), s = a?.formatter ?? Z, r = a?.series ?? [], u = a?.data, n = a?.maxItems, c = a?.labels, m = a?.onRowClick, x = a?.selected, y = a?.max, [f] = J(n ? 40 * (r.length || 1) * n : void 0), C = Object.values(i.palette.qualitative.bold), g = r.length > 0 ? r.map(($, v) => $.color ?? C[v % C.length] ?? i.palette.primary.main) : [i.palette.primary.main];
297
+ }, e[0] = o, e[1] = r) : r = e[1];
298
+ const i = U(z(r)), s = i?.formatter ?? Z, l = i?.series ?? [], u = i?.data, n = i?.maxItems, c = i?.labels, m = i?.onRowClick, x = i?.selected, y = i?.max, [f] = J(n ? 40 * (l.length || 1) * n : void 0), C = Object.values(a.palette.qualitative.bold), g = l.length > 0 ? l.map(($, v) => $.color ?? C[v % C.length] ?? a.palette.secondary.main) : [a.palette.secondary.main];
299
299
  let p, w, k, T, R, V, L, B;
300
- if (e[2] !== g || e[3] !== u || e[4] !== s || e[5] !== y || e[6] !== f || e[7] !== n || e[8] !== m || e[9] !== x || e[10] !== r || e[11] !== i.palette.primary) {
300
+ if (e[2] !== g || e[3] !== u || e[4] !== s || e[5] !== y || e[6] !== f || e[7] !== n || e[8] !== m || e[9] !== x || e[10] !== l) {
301
301
  B = /* @__PURE__ */ Symbol.for("react.early_return_sentinel");
302
302
  e: {
303
303
  const $ = te({
@@ -309,35 +309,35 @@ function ye(t) {
309
309
  }
310
310
  const v = y ?? Math.max(...$.flatMap(ee)), A = n !== void 0 && n >= 0 ? $.slice(0, n) : $;
311
311
  k = $.length - A.length;
312
- const P = r.length > 1;
313
- w = b, e[20] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (L = {
312
+ const P = l.length > 1;
313
+ w = b, e[19] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (L = {
314
314
  ...d.root
315
- }, e[20] = L) : L = e[20], p = b, T = d.list;
315
+ }, e[19] = L) : L = e[19], p = b, T = d.list;
316
316
  const O = k === 0 ? "auto" : "hidden";
317
- e[21] !== f || e[22] !== O ? (R = {
317
+ e[20] !== f || e[21] !== O ? (R = {
318
318
  maxHeight: f,
319
319
  overflow: O
320
- }, e[21] = f, e[22] = O, e[23] = R) : R = e[23], V = P ? A.map((I) => /* @__PURE__ */ h(Q, { name: I.name, values: I.values, maxValue: v, colors: g, formatter: s, onClick: m, selected: x?.(I.name) ?? !0 }, I.name)) : A.map((I) => /* @__PURE__ */ h(K, { name: I.name, value: I.values[0] ?? 0, selected: x?.(I.name) ?? !0, maxValue: v, color: g[0] ?? i.palette.primary.main, formatter: s, onClick: m }, I.name));
320
+ }, e[20] = f, e[21] = O, e[22] = R) : R = e[22], V = P ? A.map((I) => /* @__PURE__ */ h(Q, { name: I.name, values: I.values, maxValue: v, colors: g, formatter: s, onClick: m, selected: x?.(I.name) ?? !0 }, I.name)) : A.map((I) => /* @__PURE__ */ h(K, { name: I.name, value: I.values[0] ?? 0, selected: x?.(I.name) ?? !0, maxValue: v, color: g[0], formatter: s, onClick: m }, I.name));
321
321
  }
322
- e[2] = g, e[3] = u, e[4] = s, e[5] = y, e[6] = f, e[7] = n, e[8] = m, e[9] = x, e[10] = r, e[11] = i.palette.primary, e[12] = p, e[13] = w, e[14] = k, e[15] = T, e[16] = R, e[17] = V, e[18] = L, e[19] = B;
322
+ e[2] = g, e[3] = u, e[4] = s, e[5] = y, e[6] = f, e[7] = n, e[8] = m, e[9] = x, e[10] = l, e[11] = p, e[12] = w, e[13] = k, e[14] = T, e[15] = R, e[16] = V, e[17] = L, e[18] = B;
323
323
  } else
324
- p = e[12], w = e[13], k = e[14], T = e[15], R = e[16], V = e[17], L = e[18], B = e[19];
324
+ p = e[11], w = e[12], k = e[13], T = e[14], R = e[15], V = e[16], L = e[17], B = e[18];
325
325
  if (B !== /* @__PURE__ */ Symbol.for("react.early_return_sentinel"))
326
326
  return B;
327
327
  let F;
328
- e[24] !== k || e[25] !== c?.other || e[26] !== c?.otherCount ? (F = k > 0 && /* @__PURE__ */ h(X, { hiddenCount: k, otherLabel: c?.other, otherCountLabel: c?.otherCount }), e[24] = k, e[25] = c?.other, e[26] = c?.otherCount, e[27] = F) : F = e[27];
328
+ e[23] !== k || e[24] !== c?.other || e[25] !== c?.otherCount ? (F = k > 0 && /* @__PURE__ */ h(X, { hiddenCount: k, otherLabel: c?.other, otherCountLabel: c?.otherCount }), e[23] = k, e[24] = c?.other, e[25] = c?.otherCount, e[26] = F) : F = e[26];
329
329
  let W;
330
- e[28] !== p || e[29] !== T || e[30] !== R || e[31] !== V || e[32] !== F ? (W = /* @__PURE__ */ S(p, { sx: T, style: R, children: [
330
+ e[27] !== p || e[28] !== T || e[29] !== R || e[30] !== V || e[31] !== F ? (W = /* @__PURE__ */ S(p, { sx: T, style: R, children: [
331
331
  V,
332
332
  F
333
- ] }), e[28] = p, e[29] = T, e[30] = R, e[31] = V, e[32] = F, e[33] = W) : W = e[33];
333
+ ] }), e[27] = p, e[28] = T, e[29] = R, e[30] = V, e[31] = F, e[32] = W) : W = e[32];
334
334
  let _;
335
- e[34] !== g || e[35] !== r ? (_ = r.length > 0 && /* @__PURE__ */ h(Y, { series: r, colors: g }), e[34] = g, e[35] = r, e[36] = _) : _ = e[36];
335
+ e[33] !== g || e[34] !== l ? (_ = l.length > 0 && /* @__PURE__ */ h(Y, { series: l, colors: g }), e[33] = g, e[34] = l, e[35] = _) : _ = e[35];
336
336
  let j;
337
- return e[37] !== w || e[38] !== L || e[39] !== W || e[40] !== _ ? (j = /* @__PURE__ */ S(w, { sx: L, children: [
337
+ return e[36] !== w || e[37] !== L || e[38] !== W || e[39] !== _ ? (j = /* @__PURE__ */ S(w, { sx: L, children: [
338
338
  W,
339
339
  _
340
- ] }), e[37] = w, e[38] = L, e[39] = W, e[40] = _, e[41] = j) : j = e[41], j;
340
+ ] }), e[36] = w, e[37] = L, e[38] = W, e[39] = _, e[40] = j) : j = e[40], j;
341
341
  }
342
342
  function ee(t) {
343
343
  return t.values;
@@ -346,17 +346,17 @@ function te({
346
346
  data: t
347
347
  }) {
348
348
  if (!t || t.length === 0) return [];
349
- const e = Math.max(t.length, 1), o = /* @__PURE__ */ new Map(), i = [];
350
- for (let l = 0; l < t.length; l++) {
351
- const a = t[l];
352
- for (const s of a) {
353
- let r = o.get(s.name);
354
- r || (r = new Array(e).fill(0), o.set(s.name, r), i.push(s.name)), r[l] = s.value;
349
+ const e = Math.max(t.length, 1), o = /* @__PURE__ */ new Map(), a = [];
350
+ for (let r = 0; r < t.length; r++) {
351
+ const i = t[r];
352
+ for (const s of i) {
353
+ let l = o.get(s.name);
354
+ l || (l = new Array(e).fill(0), o.set(s.name, l), a.push(s.name)), l[r] = s.value;
355
355
  }
356
356
  }
357
- return i.map((l) => ({
358
- name: l,
359
- values: o.get(l)
357
+ return a.map((r) => ({
358
+ name: r,
359
+ values: o.get(r)
360
360
  }));
361
361
  }
362
362
  const oe = [85, 70, 55, 75, 60];
@@ -365,9 +365,9 @@ function be() {
365
365
  let e;
366
366
  return t[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (e = /* @__PURE__ */ h(b, { sx: d.list, "aria-label": "Category skeleton", children: Array.from({
367
367
  length: 5
368
- }).map(re) }), t[0] = e) : e = t[0], e;
368
+ }).map(le) }), t[0] = e) : e = t[0], e;
369
369
  }
370
- function re(t, e) {
370
+ function le(t, e) {
371
371
  return /* @__PURE__ */ S(b, { sx: d.row, children: [
372
372
  /* @__PURE__ */ S(b, { sx: d.rowHeader, children: [
373
373
  /* @__PURE__ */ h(H, { width: 80, height: 16 }),
@@ -391,16 +391,16 @@ function Ce({
391
391
  modifier: async (o) => {
392
392
  if (!o?.length || o[0]?.length === 0)
393
393
  return q.modifier([]);
394
- const i = o.length, l = /* @__PURE__ */ new Map(), a = [];
395
- for (let n = 0; n < i; n++) {
394
+ const a = o.length, r = /* @__PURE__ */ new Map(), i = [];
395
+ for (let n = 0; n < a; n++) {
396
396
  const c = o[n];
397
397
  for (const m of c) {
398
- let x = l.get(m.name);
399
- x || (x = new Array(i).fill(0), l.set(m.name, x), a.push(m.name)), x[n] = m.value;
398
+ let x = r.get(m.name);
399
+ x || (x = new Array(a).fill(0), r.set(m.name, x), i.push(m.name)), x[n] = m.value;
400
400
  }
401
401
  }
402
- const s = a.map((n) => [n, ...l.get(n)]), u = i > 1 ? ["Category", ...e?.map((n) => n.name) ?? Array.from({
403
- length: i
402
+ const s = i.map((n) => [n, ...r.get(n)]), u = a > 1 ? ["Category", ...e?.map((n) => n.name) ?? Array.from({
403
+ length: a
404
404
  }, (n, c) => `Series ${c + 1}`)] : ["Category", "Value"];
405
405
  return q.modifier([u, ...s]);
406
406
  }
@@ -1 +1 @@
1
- {"version":3,"file":"category.js","sources":["../../src/widgets/category/style.ts","../../src/widgets/category/components/category-bar.tsx","../../src/widgets/category/components/category-row-single.tsx","../../src/widgets/category/components/category-row-multi.tsx","../../src/widgets/category/components/category-row-other.tsx","../../src/widgets/category/components/category-legend.tsx","../../src/widgets/category/category-ui.tsx","../../src/widgets/category/skeleton.tsx","../../src/widgets/category/config.ts"],"sourcesContent":["import type { SxProps, Theme } from '@mui/material'\n\nexport const styles = {\n root: {\n display: 'flex',\n flexDirection: 'column',\n position: 'relative',\n },\n list: {\n display: 'flex',\n flexDirection: 'column',\n gap: (theme: Theme) => theme.spacing(1),\n },\n row: {\n display: 'flex',\n flexDirection: 'column',\n gap: (theme: Theme) => theme.spacing(0.5),\n pointerEvents: 'none',\n },\n rowClickable: {\n pointerEvents: 'auto',\n // display: 'flex',\n // flexDirection: 'column',\n // gap: (theme: Theme) => theme.spacing(0.5),\n // cursor: 'pointer',\n // borderRadius: 1,\n // padding: (theme: Theme) => theme.spacing(0.5),\n // margin: (theme: Theme) => theme.spacing(-0.5),\n // transition: 'background-color 0.15s ease-in-out',\n // '&:hover': {\n // backgroundColor: (theme: Theme) => theme.palette.action.hover,\n // },\n },\n rowHeader: {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n },\n rowLabel: {\n typography: 'body2',\n fontWeight: 'medium',\n color: 'text.primary',\n },\n rowValue: {\n typography: 'body2',\n color: 'text.secondary',\n },\n barContainer: {\n display: 'flex',\n flexDirection: 'column',\n },\n bar: {\n height: 4,\n borderRadius: 2,\n backgroundColor: (theme: Theme) => theme.palette.action.disabledBackground,\n overflow: 'hidden',\n position: 'relative',\n transition: 'background-color 0.15s ease-in-out',\n cursor: 'pointer',\n '&:hover': {\n backgroundColor: (theme: Theme) => theme.palette.action.hover,\n\n '& > div': {\n filter: 'brightness(1.2)',\n },\n },\n },\n barFill: {\n height: '100%',\n borderRadius: 2,\n transition: 'width 0.3s ease-in-out, background-color 0.15s ease-in-out',\n },\n barFillMuted: {\n backgroundColor: (theme: Theme) => theme.palette.action.disabled,\n },\n legend: {\n display: 'flex',\n alignItems: 'center',\n gap: (theme: Theme) => theme.spacing(2),\n flexWrap: 'wrap',\n paddingTop: (theme: Theme) => theme.spacing(2),\n position: 'sticky',\n bottom: 0,\n backgroundColor: 'background.paper',\n borderTop: (theme: Theme) => `1px solid ${theme.palette.divider}`,\n marginTop: (theme: Theme) => theme.spacing(2),\n },\n legendItem: {\n display: 'flex',\n alignItems: 'center',\n gap: (theme: Theme) => theme.spacing(1),\n },\n legendDot: {\n width: 8,\n height: 8,\n borderRadius: '50%',\n },\n legendLabel: {\n typography: 'caption',\n color: 'text.secondary',\n textTransform: 'uppercase',\n fontWeight: 'medium',\n },\n multiBarRow: {\n display: 'flex',\n alignItems: 'center',\n gap: (theme: Theme) => theme.spacing(1),\n },\n multiBarValue: {\n typography: 'body2',\n color: 'text.secondary',\n minWidth: 48,\n textAlign: 'right',\n },\n multiBarContainer: {\n flex: 1,\n },\n otherRow: {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n },\n otherLabel: {\n typography: 'body2',\n fontWeight: 'medium',\n color: 'text.secondary',\n fontStyle: 'italic',\n },\n otherCount: {\n typography: 'body2',\n color: 'text.disabled',\n },\n} satisfies Record<string, SxProps<Theme>>\n","import { Box } from '@mui/material'\nimport { styles } from '../style'\n\nexport interface CategoryBarProps {\n value: number\n maxValue: number\n color: string\n selected?: boolean\n}\n\nexport function CategoryBar({\n value,\n maxValue,\n color,\n selected = true,\n}: CategoryBarProps) {\n const percentage = maxValue > 0 ? (value / maxValue) * 100 : 0\n\n const barFillSx = selected\n ? { ...styles.barFill, width: `${percentage}%`, backgroundColor: color }\n : { ...styles.barFill, ...styles.barFillMuted, width: `${percentage}%` }\n\n return (\n <Box sx={styles.bar}>\n <Box sx={barFillSx} />\n </Box>\n )\n}\n","import { Box, Typography } from '@mui/material'\nimport { styles } from '../style'\nimport { CategoryBar } from './category-bar'\nimport type { CategoryWidgetConfig } from '../types'\n\nexport interface CategoryRowSingleProps {\n name: string\n value: number\n maxValue: number\n color: string\n formatter: NonNullable<CategoryWidgetConfig['formatter']>\n onClick?: CategoryWidgetConfig['onRowClick']\n selected?: boolean\n}\n\nexport function CategoryRowSingle({\n name,\n value,\n maxValue,\n color,\n formatter,\n onClick,\n selected = true,\n}: CategoryRowSingleProps) {\n const handleClick = onClick\n ? () =>\n onClick({\n name,\n })\n : undefined\n const rowStyle = onClick ? styles.rowClickable : styles.row\n\n return (\n <Box sx={rowStyle} onClick={handleClick}>\n <Box sx={styles.rowHeader}>\n <Typography sx={styles.rowLabel}>{name}</Typography>\n <Typography sx={styles.rowValue}>{formatter(value)}</Typography>\n </Box>\n <CategoryBar\n value={value}\n maxValue={maxValue}\n color={color}\n selected={selected}\n />\n </Box>\n )\n}\n","import { Box, Typography } from '@mui/material'\nimport { styles } from '../style'\nimport { CategoryBar } from './category-bar'\nimport type { CategoryWidgetConfig } from '../types'\n\nexport interface CategoryRowMultiProps {\n name: string\n values: number[]\n maxValue: number\n colors: string[]\n formatter: NonNullable<CategoryWidgetConfig['formatter']>\n onClick?: CategoryWidgetConfig['onRowClick']\n selected?: boolean\n}\n\nexport function CategoryRowMulti({\n name,\n values,\n maxValue,\n colors,\n formatter,\n onClick,\n selected = true,\n}: CategoryRowMultiProps) {\n const handleClick = onClick ? () => onClick({ name }) : undefined\n const rowStyle = onClick ? styles.rowClickable : styles.row\n\n return (\n <Box sx={rowStyle} onClick={handleClick}>\n <Typography sx={styles.rowLabel}>{name}</Typography>\n <Box sx={styles.barContainer}>\n {values.map((value, index) => (\n <Box key={`${name}-${value}-${index}`} sx={styles.multiBarRow}>\n <Box sx={styles.multiBarContainer}>\n <CategoryBar\n value={value}\n maxValue={maxValue}\n color={colors[index % colors.length] ?? ''}\n selected={selected}\n />\n </Box>\n <Typography sx={styles.multiBarValue}>\n {formatter(value)}\n </Typography>\n </Box>\n ))}\n </Box>\n </Box>\n )\n}\n","import { Box, Typography } from '@mui/material'\nimport { styles } from '../style'\n\nexport interface CategoryRowOtherProps {\n hiddenCount: number\n otherLabel?: string\n otherCountLabel?: string\n}\n\nexport function CategoryRowOther({\n hiddenCount,\n otherLabel = 'Other',\n otherCountLabel = '{count} more',\n}: CategoryRowOtherProps) {\n const countText = otherCountLabel.replace('{count}', String(hiddenCount))\n\n return (\n <Box sx={styles.otherRow}>\n <Typography sx={styles.otherLabel}>{otherLabel}</Typography>\n <Typography sx={styles.otherCount}>({countText})</Typography>\n </Box>\n )\n}\n","import { Box, Typography } from '@mui/material'\nimport { styles } from '../style'\nimport type { CategorySeriesConfig } from '../types'\n\nexport interface CategoryLegendProps {\n series: CategorySeriesConfig[]\n colors: string[]\n}\n\nexport function CategoryLegend({ series, colors }: CategoryLegendProps) {\n if (series.length === 0) {\n return null\n }\n\n return (\n <Box sx={styles.legend}>\n {series.map((item, index) => (\n <Box key={item.name} sx={styles.legendItem}>\n <Box\n sx={{\n ...styles.legendDot,\n backgroundColor: item.color ?? colors[index % colors.length],\n }}\n />\n <Typography sx={styles.legendLabel}>{item.name}</Typography>\n </Box>\n ))}\n </Box>\n )\n}\n","import { Box, useTheme } from '@mui/material'\nimport { useWidgetStore } from '../stores/widget-store'\nimport { styles } from './style'\nimport type { CategoryUIProps, CategoryWidgetState } from './types'\nimport {\n CategoryRowSingle,\n CategoryRowMulti,\n CategoryRowOther,\n CategoryLegend,\n} from './components'\nimport { useShallow } from 'zustand/shallow'\nimport { useState } from 'react'\n\nconst defaultFormatter = (value: number) => value.toString()\n\nexport function CategoryUI({ id }: CategoryUIProps) {\n const theme = useTheme()\n const widget = useWidgetStore(\n useShallow((state) => {\n const widget = state.getWidget<CategoryWidgetState>(id)\n return {\n formatter: widget?.formatter,\n series: widget?.series,\n data: widget?.data,\n maxItems: widget?.maxItems,\n labels: widget?.labels,\n onRowClick: widget?.onRowClick,\n selected: widget?.selected,\n max: widget?.max,\n }\n }),\n )\n\n const formatter = widget?.formatter ?? defaultFormatter\n const series = widget?.series ?? []\n const data = widget?.data\n const maxItems = widget?.maxItems\n const labels = widget?.labels\n const onRowClick = widget?.onRowClick\n const selected = widget?.selected\n const max = widget?.max\n\n const [maxHeight] = useState<string | number | undefined>(\n maxItems ? 40 * (series.length || 1) * maxItems : undefined,\n )\n\n const qualitativeColors = Object.values(theme.palette.qualitative.bold)\n\n const colors =\n series.length > 0\n ? series.map(\n (s, index: number) =>\n s.color ??\n qualitativeColors[index % qualitativeColors.length] ??\n theme.palette.primary.main,\n )\n : [theme.palette.primary.main]\n\n // Group data items by name to support multi-series display\n // data is CategoryDataItem[][] where data[seriesIndex] contains items for that series\n const groupedData = generateGroupedData({ data })\n\n if (groupedData.length === 0) {\n return null\n }\n\n const maxValue =\n max ?? Math.max(...groupedData.flatMap((item) => item.values))\n\n // Slice data to maxItems and compute hidden count\n const visibleData =\n maxItems !== undefined && maxItems >= 0\n ? groupedData.slice(0, maxItems)\n : groupedData\n\n const hiddenCount = groupedData.length - visibleData.length\n const isMulti = series.length > 1\n\n return (\n <Box\n sx={{\n ...styles.root,\n }}\n >\n <Box\n sx={styles.list}\n style={{ maxHeight, overflow: hiddenCount === 0 ? 'auto' : 'hidden' }}\n >\n {isMulti\n ? visibleData.map((item) => (\n <CategoryRowMulti\n key={item.name}\n name={item.name}\n values={item.values}\n maxValue={maxValue}\n colors={colors}\n formatter={formatter}\n onClick={onRowClick}\n selected={selected?.(item.name) ?? true}\n />\n ))\n : visibleData.map((item) => (\n <CategoryRowSingle\n key={item.name}\n name={item.name}\n value={item.values[0] ?? 0}\n selected={selected?.(item.name) ?? true}\n maxValue={maxValue}\n color={colors[0] ?? theme.palette.primary.main}\n formatter={formatter}\n onClick={onRowClick}\n />\n ))}\n {hiddenCount > 0 && (\n <CategoryRowOther\n hiddenCount={hiddenCount}\n otherLabel={labels?.other}\n otherCountLabel={labels?.otherCount}\n />\n )}\n </Box>\n {series.length > 0 && <CategoryLegend series={series} colors={colors} />}\n </Box>\n )\n}\n\nfunction generateGroupedData({\n data,\n}: {\n data: { name: string; value: number }[][] | undefined\n}) {\n if (!data || data.length === 0) return []\n\n const seriesCount = Math.max(data.length, 1)\n const grouped = new Map<string, number[]>()\n const nameOrder: string[] = []\n\n // Iterate over each series (outer array)\n for (let seriesIndex = 0; seriesIndex < data.length; seriesIndex++) {\n const seriesData = data[seriesIndex]!\n for (const item of seriesData) {\n let values = grouped.get(item.name)\n if (!values) {\n values = new Array<number>(seriesCount).fill(0)\n grouped.set(item.name, values)\n nameOrder.push(item.name)\n }\n values[seriesIndex] = item.value\n }\n }\n\n return nameOrder.map((name) => ({\n name,\n values: grouped.get(name)!,\n }))\n}\n","import { Box, Skeleton } from '@mui/material'\nimport { styles } from './style'\n\nconst widthPatterns = [85, 70, 55, 75, 60]\n\nexport function CategorySkeleton() {\n return (\n <Box sx={styles.list} aria-label='Category skeleton'>\n {Array.from({ length: 5 }).map((_, index) => (\n <Box key={index} sx={styles.row}>\n <Box sx={styles.rowHeader}>\n <Skeleton width={80} height={16} />\n <Skeleton width={40} height={16} />\n </Box>\n <Skeleton\n variant='rectangular'\n height={4}\n sx={{ borderRadius: 2, width: `${widthPatterns[index]}%` }}\n />\n </Box>\n ))}\n </Box>\n )\n}\n","import { downloadToCSV, downloadToPNG, type DownloadItem } from '../actions'\nimport type { ConfigProps } from '../loader/types'\nimport type {\n CategoryWidgetConfig,\n CategoryWidgetData,\n CategorySeriesConfig,\n CategoryLabels,\n} from './types'\n\nexport interface CategoryDownloadConfigProps extends ConfigProps {\n series?: CategorySeriesConfig[]\n}\n\nexport interface CategoryConfigProps {\n data?: CategoryWidgetData\n series?: CategorySeriesConfig[]\n formatter?: (value: number) => string\n maxItems?: number\n labels?: CategoryLabels\n max?: number\n}\n\nexport function categoryDownloadConfig({\n refUI,\n series,\n}: CategoryDownloadConfigProps): DownloadItem<CategoryWidgetData>[] {\n return [\n {\n ...downloadToPNG,\n modifier: () => downloadToPNG.modifier(refUI),\n },\n {\n ...downloadToCSV,\n modifier: async (data) => {\n if (!data?.length || data[0]?.length === 0) {\n return downloadToCSV.modifier([])\n }\n\n // data is CategoryDataItem[][] where data[seriesIndex] contains items for that series\n const seriesCount = data.length\n const grouped = new Map<string, number[]>()\n const nameOrder: string[] = []\n\n // Iterate over each series (outer array)\n for (let seriesIndex = 0; seriesIndex < seriesCount; seriesIndex++) {\n const seriesData = data[seriesIndex]!\n for (const item of seriesData) {\n let values = grouped.get(item.name)\n if (!values) {\n values = new Array<number>(seriesCount).fill(0)\n grouped.set(item.name, values)\n nameOrder.push(item.name)\n }\n values[seriesIndex] = item.value\n }\n }\n\n // Build rows\n const rows = nameOrder.map((name) => [name, ...grouped.get(name)!])\n\n const isMulti = seriesCount > 1\n const headers = isMulti\n ? [\n 'Category',\n ...(series?.map((s: CategorySeriesConfig) => s.name) ??\n Array.from(\n { length: seriesCount },\n (_, i) => `Series ${i + 1}`,\n )),\n ]\n : ['Category', 'Value']\n\n return downloadToCSV.modifier([headers, ...rows])\n },\n },\n ]\n}\n\nexport function categoryConfig(): CategoryWidgetConfig {\n return {\n series: [],\n maxItems: 10,\n max: undefined,\n }\n}\n"],"names":["styles","root","display","flexDirection","position","list","gap","theme","spacing","row","pointerEvents","rowClickable","rowHeader","justifyContent","alignItems","rowLabel","typography","fontWeight","color","rowValue","barContainer","bar","height","borderRadius","backgroundColor","palette","action","disabledBackground","overflow","transition","cursor","hover","filter","barFill","barFillMuted","disabled","legend","flexWrap","paddingTop","bottom","borderTop","divider","marginTop","legendItem","legendDot","width","legendLabel","textTransform","multiBarRow","multiBarValue","minWidth","textAlign","multiBarContainer","flex","otherRow","otherLabel","fontStyle","otherCount","CategoryBar","t0","$","_c","value","maxValue","selected","t1","undefined","percentage","t2","barFillSx","t3","jsx","Box","CategoryRowSingle","name","formatter","onClick","handleClick","rowStyle","Typography","t4","t5","t6","t7","t8","jsxs","CategoryRowMulti","values","colors","index","length","map","CategoryRowOther","hiddenCount","otherCountLabel","replace","String","countText","CategoryLegend","series","item","defaultFormatter","toString","CategoryUI","id","useTheme","state","widget","getWidget","data","maxItems","labels","onRowClick","max","widget_0","useWidgetStore","useShallow","maxHeight","useState","qualitativeColors","Object","qualitative","bold","s","primary","main","T0","T1","Symbol","for","bb0","groupedData","generateGroupedData","Math","flatMap","_temp","visibleData","slice","isMulti","item_0","item_1","other","t9","t10","seriesCount","grouped","Map","nameOrder","seriesIndex","seriesData","get","Array","fill","set","push","widthPatterns","CategorySkeleton","from","_","Skeleton","categoryDownloadConfig","refUI","downloadToPNG","modifier","downloadToCSV","rows","headers","i","categoryConfig"],"mappings":"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"}
1
+ {"version":3,"file":"category.js","sources":["../../src/widgets/category/style.ts","../../src/widgets/category/components/category-bar.tsx","../../src/widgets/category/components/category-row-single.tsx","../../src/widgets/category/components/category-row-multi.tsx","../../src/widgets/category/components/category-row-other.tsx","../../src/widgets/category/components/category-legend.tsx","../../src/widgets/category/category-ui.tsx","../../src/widgets/category/skeleton.tsx","../../src/widgets/category/config.ts"],"sourcesContent":["import type { SxProps, Theme } from '@mui/material'\n\nexport const styles = {\n root: {\n display: 'flex',\n flexDirection: 'column',\n position: 'relative',\n },\n list: {\n display: 'flex',\n flexDirection: 'column',\n gap: (theme: Theme) => theme.spacing(1),\n },\n row: {\n display: 'flex',\n flexDirection: 'column',\n gap: (theme: Theme) => theme.spacing(0.5),\n pointerEvents: 'none',\n },\n rowClickable: {\n pointerEvents: 'auto',\n // display: 'flex',\n // flexDirection: 'column',\n // gap: (theme: Theme) => theme.spacing(0.5),\n // cursor: 'pointer',\n // borderRadius: 1,\n // padding: (theme: Theme) => theme.spacing(0.5),\n // margin: (theme: Theme) => theme.spacing(-0.5),\n // transition: 'background-color 0.15s ease-in-out',\n // '&:hover': {\n // backgroundColor: (theme: Theme) => theme.palette.action.hover,\n // },\n },\n rowHeader: {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n },\n rowLabel: {\n typography: 'body2',\n fontWeight: 'medium',\n color: 'text.primary',\n },\n rowValue: {\n typography: 'body2',\n color: 'text.secondary',\n },\n barContainer: {\n display: 'flex',\n flexDirection: 'column',\n },\n bar: {\n height: 4,\n borderRadius: 2,\n backgroundColor: (theme: Theme) => theme.palette.action.disabledBackground,\n overflow: 'hidden',\n position: 'relative',\n transition: 'background-color 0.15s ease-in-out',\n cursor: 'pointer',\n '&:hover': {\n backgroundColor: (theme: Theme) => theme.palette.action.hover,\n\n '& > div': {\n filter: 'brightness(1.2)',\n },\n },\n },\n barFill: {\n height: '100%',\n borderRadius: 2,\n transition: 'width 0.3s ease-in-out, background-color 0.15s ease-in-out',\n },\n barFillMuted: {\n backgroundColor: (theme: Theme) => theme.palette.action.disabled,\n },\n legend: {\n display: 'flex',\n alignItems: 'center',\n gap: (theme: Theme) => theme.spacing(2),\n flexWrap: 'wrap',\n paddingTop: (theme: Theme) => theme.spacing(2),\n position: 'sticky',\n bottom: 0,\n backgroundColor: 'background.paper',\n borderTop: (theme: Theme) => `1px solid ${theme.palette.divider}`,\n marginTop: (theme: Theme) => theme.spacing(2),\n },\n legendItem: {\n display: 'flex',\n alignItems: 'center',\n gap: (theme: Theme) => theme.spacing(1),\n },\n legendDot: {\n width: 8,\n height: 8,\n borderRadius: '50%',\n },\n legendLabel: {\n typography: 'caption',\n color: 'text.secondary',\n textTransform: 'uppercase',\n fontWeight: 'medium',\n },\n multiBarRow: {\n display: 'flex',\n alignItems: 'center',\n gap: (theme: Theme) => theme.spacing(1),\n },\n multiBarValue: {\n typography: 'body2',\n color: 'text.secondary',\n minWidth: 48,\n textAlign: 'right',\n },\n multiBarContainer: {\n flex: 1,\n },\n otherRow: {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n },\n otherLabel: {\n typography: 'body2',\n fontWeight: 'medium',\n color: 'text.secondary',\n fontStyle: 'italic',\n },\n otherCount: {\n typography: 'body2',\n color: 'text.disabled',\n },\n} satisfies Record<string, SxProps<Theme>>\n","import { Box } from '@mui/material'\nimport { styles } from '../style'\n\nexport interface CategoryBarProps {\n value: number\n maxValue: number\n color: string\n selected?: boolean\n}\n\nexport function CategoryBar({\n value,\n maxValue,\n color,\n selected = true,\n}: CategoryBarProps) {\n const percentage = maxValue > 0 ? (value / maxValue) * 100 : 0\n\n const barFillSx = selected\n ? { ...styles.barFill, width: `${percentage}%`, backgroundColor: color }\n : { ...styles.barFill, ...styles.barFillMuted, width: `${percentage}%` }\n\n return (\n <Box sx={styles.bar}>\n <Box sx={barFillSx} />\n </Box>\n )\n}\n","import { Box, Typography } from '@mui/material'\nimport { styles } from '../style'\nimport { CategoryBar } from './category-bar'\nimport type { CategoryWidgetConfig } from '../types'\n\nexport interface CategoryRowSingleProps {\n name: string\n value: number\n maxValue: number\n color: string\n formatter: NonNullable<CategoryWidgetConfig['formatter']>\n onClick?: CategoryWidgetConfig['onRowClick']\n selected?: boolean\n}\n\nexport function CategoryRowSingle({\n name,\n value,\n maxValue,\n color,\n formatter,\n onClick,\n selected = true,\n}: CategoryRowSingleProps) {\n const handleClick = onClick\n ? () =>\n onClick({\n name,\n })\n : undefined\n const rowStyle = onClick ? styles.rowClickable : styles.row\n\n return (\n <Box sx={rowStyle} onClick={handleClick}>\n <Box sx={styles.rowHeader}>\n <Typography sx={styles.rowLabel}>{name}</Typography>\n <Typography sx={styles.rowValue}>{formatter(value)}</Typography>\n </Box>\n <CategoryBar\n value={value}\n maxValue={maxValue}\n color={color}\n selected={selected}\n />\n </Box>\n )\n}\n","import { Box, Typography } from '@mui/material'\nimport { styles } from '../style'\nimport { CategoryBar } from './category-bar'\nimport type { CategoryWidgetConfig } from '../types'\n\nexport interface CategoryRowMultiProps {\n name: string\n values: number[]\n maxValue: number\n colors: string[]\n formatter: NonNullable<CategoryWidgetConfig['formatter']>\n onClick?: CategoryWidgetConfig['onRowClick']\n selected?: boolean\n}\n\nexport function CategoryRowMulti({\n name,\n values,\n maxValue,\n colors,\n formatter,\n onClick,\n selected = true,\n}: CategoryRowMultiProps) {\n const handleClick = onClick ? () => onClick({ name }) : undefined\n const rowStyle = onClick ? styles.rowClickable : styles.row\n\n return (\n <Box sx={rowStyle} onClick={handleClick}>\n <Typography sx={styles.rowLabel}>{name}</Typography>\n <Box sx={styles.barContainer}>\n {values.map((value, index) => (\n <Box key={`${name}-${value}-${index}`} sx={styles.multiBarRow}>\n <Box sx={styles.multiBarContainer}>\n <CategoryBar\n value={value}\n maxValue={maxValue}\n color={colors[index % colors.length] ?? ''}\n selected={selected}\n />\n </Box>\n <Typography sx={styles.multiBarValue}>\n {formatter(value)}\n </Typography>\n </Box>\n ))}\n </Box>\n </Box>\n )\n}\n","import { Box, Typography } from '@mui/material'\nimport { styles } from '../style'\n\nexport interface CategoryRowOtherProps {\n hiddenCount: number\n otherLabel?: string\n otherCountLabel?: string\n}\n\nexport function CategoryRowOther({\n hiddenCount,\n otherLabel = 'Other',\n otherCountLabel = '{count} more',\n}: CategoryRowOtherProps) {\n const countText = otherCountLabel.replace('{count}', String(hiddenCount))\n\n return (\n <Box sx={styles.otherRow}>\n <Typography sx={styles.otherLabel}>{otherLabel}</Typography>\n <Typography sx={styles.otherCount}>({countText})</Typography>\n </Box>\n )\n}\n","import { Box, Typography } from '@mui/material'\nimport { styles } from '../style'\nimport type { CategorySeriesConfig } from '../types'\n\nexport interface CategoryLegendProps {\n series: CategorySeriesConfig[]\n colors: string[]\n}\n\nexport function CategoryLegend({ series, colors }: CategoryLegendProps) {\n if (series.length === 0) {\n return null\n }\n\n return (\n <Box sx={styles.legend}>\n {series.map((item, index) => (\n <Box key={item.name} sx={styles.legendItem}>\n <Box\n sx={{\n ...styles.legendDot,\n backgroundColor: item.color ?? colors[index % colors.length],\n }}\n />\n <Typography sx={styles.legendLabel}>{item.name}</Typography>\n </Box>\n ))}\n </Box>\n )\n}\n","import { Box, useTheme } from '@mui/material'\nimport { useWidgetStore } from '../stores/widget-store'\nimport { styles } from './style'\nimport type { CategoryUIProps, CategoryWidgetState } from './types'\nimport {\n CategoryRowSingle,\n CategoryRowMulti,\n CategoryRowOther,\n CategoryLegend,\n} from './components'\nimport { useShallow } from 'zustand/shallow'\nimport { useState } from 'react'\n\nconst defaultFormatter = (value: number) => value.toString()\n\nexport function CategoryUI({ id }: CategoryUIProps) {\n const theme = useTheme()\n const widget = useWidgetStore(\n useShallow((state) => {\n const widget = state.getWidget<CategoryWidgetState>(id)\n return {\n formatter: widget?.formatter,\n series: widget?.series,\n data: widget?.data,\n maxItems: widget?.maxItems,\n labels: widget?.labels,\n onRowClick: widget?.onRowClick,\n selected: widget?.selected,\n max: widget?.max,\n }\n }),\n )\n\n const formatter = widget?.formatter ?? defaultFormatter\n const series = widget?.series ?? []\n const data = widget?.data\n const maxItems = widget?.maxItems\n const labels = widget?.labels\n const onRowClick = widget?.onRowClick\n const selected = widget?.selected\n const max = widget?.max\n\n const [maxHeight] = useState<string | number | undefined>(\n maxItems ? 40 * (series.length || 1) * maxItems : undefined,\n )\n\n const qualitativeColors = Object.values(theme.palette.qualitative.bold)\n\n const colors =\n series.length > 0\n ? series.map(\n (s, index: number) =>\n s.color ??\n qualitativeColors[index % qualitativeColors.length] ??\n theme.palette.secondary.main,\n )\n : [theme.palette.secondary.main]\n\n // Group data items by name to support multi-series display\n // data is CategoryDataItem[][] where data[seriesIndex] contains items for that series\n const groupedData = generateGroupedData({ data })\n\n if (groupedData.length === 0) {\n return null\n }\n\n const maxValue =\n max ?? Math.max(...groupedData.flatMap((item) => item.values))\n\n // Slice data to maxItems and compute hidden count\n const visibleData =\n maxItems !== undefined && maxItems >= 0\n ? groupedData.slice(0, maxItems)\n : groupedData\n\n const hiddenCount = groupedData.length - visibleData.length\n const isMulti = series.length > 1\n\n return (\n <Box\n sx={{\n ...styles.root,\n }}\n >\n <Box\n sx={styles.list}\n style={{ maxHeight, overflow: hiddenCount === 0 ? 'auto' : 'hidden' }}\n >\n {isMulti\n ? visibleData.map((item) => (\n <CategoryRowMulti\n key={item.name}\n name={item.name}\n values={item.values}\n maxValue={maxValue}\n colors={colors}\n formatter={formatter}\n onClick={onRowClick}\n selected={selected?.(item.name) ?? true}\n />\n ))\n : visibleData.map((item) => (\n <CategoryRowSingle\n key={item.name}\n name={item.name}\n value={item.values[0] ?? 0}\n selected={selected?.(item.name) ?? true}\n maxValue={maxValue}\n color={colors[0]!}\n formatter={formatter}\n onClick={onRowClick}\n />\n ))}\n {hiddenCount > 0 && (\n <CategoryRowOther\n hiddenCount={hiddenCount}\n otherLabel={labels?.other}\n otherCountLabel={labels?.otherCount}\n />\n )}\n </Box>\n {series.length > 0 && <CategoryLegend series={series} colors={colors} />}\n </Box>\n )\n}\n\nfunction generateGroupedData({\n data,\n}: {\n data: { name: string; value: number }[][] | undefined\n}) {\n if (!data || data.length === 0) return []\n\n const seriesCount = Math.max(data.length, 1)\n const grouped = new Map<string, number[]>()\n const nameOrder: string[] = []\n\n // Iterate over each series (outer array)\n for (let seriesIndex = 0; seriesIndex < data.length; seriesIndex++) {\n const seriesData = data[seriesIndex]!\n for (const item of seriesData) {\n let values = grouped.get(item.name)\n if (!values) {\n values = new Array<number>(seriesCount).fill(0)\n grouped.set(item.name, values)\n nameOrder.push(item.name)\n }\n values[seriesIndex] = item.value\n }\n }\n\n return nameOrder.map((name) => ({\n name,\n values: grouped.get(name)!,\n }))\n}\n","import { Box, Skeleton } from '@mui/material'\nimport { styles } from './style'\n\nconst widthPatterns = [85, 70, 55, 75, 60]\n\nexport function CategorySkeleton() {\n return (\n <Box sx={styles.list} aria-label='Category skeleton'>\n {Array.from({ length: 5 }).map((_, index) => (\n <Box key={index} sx={styles.row}>\n <Box sx={styles.rowHeader}>\n <Skeleton width={80} height={16} />\n <Skeleton width={40} height={16} />\n </Box>\n <Skeleton\n variant='rectangular'\n height={4}\n sx={{ borderRadius: 2, width: `${widthPatterns[index]}%` }}\n />\n </Box>\n ))}\n </Box>\n )\n}\n","import { downloadToCSV, downloadToPNG, type DownloadItem } from '../actions'\nimport type { ConfigProps } from '../loader/types'\nimport type {\n CategoryWidgetConfig,\n CategoryWidgetData,\n CategorySeriesConfig,\n CategoryLabels,\n} from './types'\n\nexport interface CategoryDownloadConfigProps extends ConfigProps {\n series?: CategorySeriesConfig[]\n}\n\nexport interface CategoryConfigProps {\n data?: CategoryWidgetData\n series?: CategorySeriesConfig[]\n formatter?: (value: number) => string\n maxItems?: number\n labels?: CategoryLabels\n max?: number\n}\n\nexport function categoryDownloadConfig({\n refUI,\n series,\n}: CategoryDownloadConfigProps): DownloadItem<CategoryWidgetData>[] {\n return [\n {\n ...downloadToPNG,\n modifier: () => downloadToPNG.modifier(refUI),\n },\n {\n ...downloadToCSV,\n modifier: async (data) => {\n if (!data?.length || data[0]?.length === 0) {\n return downloadToCSV.modifier([])\n }\n\n // data is CategoryDataItem[][] where data[seriesIndex] contains items for that series\n const seriesCount = data.length\n const grouped = new Map<string, number[]>()\n const nameOrder: string[] = []\n\n // Iterate over each series (outer array)\n for (let seriesIndex = 0; seriesIndex < seriesCount; seriesIndex++) {\n const seriesData = data[seriesIndex]!\n for (const item of seriesData) {\n let values = grouped.get(item.name)\n if (!values) {\n values = new Array<number>(seriesCount).fill(0)\n grouped.set(item.name, values)\n nameOrder.push(item.name)\n }\n values[seriesIndex] = item.value\n }\n }\n\n // Build rows\n const rows = nameOrder.map((name) => [name, ...grouped.get(name)!])\n\n const isMulti = seriesCount > 1\n const headers = isMulti\n ? [\n 'Category',\n ...(series?.map((s: CategorySeriesConfig) => s.name) ??\n Array.from(\n { length: seriesCount },\n (_, i) => `Series ${i + 1}`,\n )),\n ]\n : ['Category', 'Value']\n\n return downloadToCSV.modifier([headers, ...rows])\n },\n },\n ]\n}\n\nexport function categoryConfig(): CategoryWidgetConfig {\n return {\n series: [],\n maxItems: 10,\n max: undefined,\n }\n}\n"],"names":["styles","root","display","flexDirection","position","list","gap","theme","spacing","row","pointerEvents","rowClickable","rowHeader","justifyContent","alignItems","rowLabel","typography","fontWeight","color","rowValue","barContainer","bar","height","borderRadius","backgroundColor","palette","action","disabledBackground","overflow","transition","cursor","hover","filter","barFill","barFillMuted","disabled","legend","flexWrap","paddingTop","bottom","borderTop","divider","marginTop","legendItem","legendDot","width","legendLabel","textTransform","multiBarRow","multiBarValue","minWidth","textAlign","multiBarContainer","flex","otherRow","otherLabel","fontStyle","otherCount","CategoryBar","t0","$","_c","value","maxValue","selected","t1","undefined","percentage","t2","barFillSx","t3","jsx","Box","CategoryRowSingle","name","formatter","onClick","handleClick","rowStyle","Typography","t4","t5","t6","t7","t8","jsxs","CategoryRowMulti","values","colors","index","length","map","CategoryRowOther","hiddenCount","otherCountLabel","replace","String","countText","CategoryLegend","series","item","defaultFormatter","toString","CategoryUI","id","useTheme","state","widget","getWidget","data","maxItems","labels","onRowClick","max","widget_0","useWidgetStore","useShallow","maxHeight","useState","qualitativeColors","Object","qualitative","bold","s","secondary","main","T0","T1","Symbol","for","bb0","groupedData","generateGroupedData","Math","flatMap","_temp","visibleData","slice","isMulti","item_0","item_1","other","t9","t10","seriesCount","grouped","Map","nameOrder","seriesIndex","seriesData","get","Array","fill","set","push","widthPatterns","CategorySkeleton","from","_","Skeleton","categoryDownloadConfig","refUI","downloadToPNG","modifier","downloadToCSV","rows","headers","i","categoryConfig"],"mappings":"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"}
@@ -1,57 +1,61 @@
1
- import { c as r } from "react/compiler-runtime";
1
+ import { c as W } from "react/compiler-runtime";
2
2
  import { useEffect as n } from "react";
3
- import { u as L } from "../widget-store-CB6Trp_0.js";
3
+ import { u as h } from "../widget-store-CB6Trp_0.js";
4
4
  import { d as x } from "../cjs-D4KH3azB.js";
5
5
  function M(e) {
6
- const i = r(27), t = L(w), d = L(_);
7
- let a, g;
8
- i[0] !== e.id || i[1] !== e.type || i[2] !== t ? (a = () => {
9
- t(e.id, {
6
+ const t = W(27), i = h(v), d = h(_);
7
+ let a, c;
8
+ t[0] !== e.id || t[1] !== e.type || t[2] !== i ? (a = () => {
9
+ i(e.id, {
10
10
  type: e.type
11
11
  });
12
- }, g = [e.id, e.type, t], i[0] = e.id, i[1] = e.type, i[2] = t, i[3] = a, i[4] = g) : (a = i[3], g = i[4]), n(a, g);
13
- let c, l;
14
- i[5] !== e.error || i[6] !== e.id || i[7] !== e.isFetching || i[8] !== e.isLoading || i[9] !== t ? (c = () => {
15
- t(e.id, {
12
+ }, c = [e.id, e.type, i], t[0] = e.id, t[1] = e.type, t[2] = i, t[3] = a, t[4] = c) : (a = t[3], c = t[4]), n(a, c);
13
+ let f, g;
14
+ t[5] !== e.error || t[6] !== e.id || t[7] !== e.isFetching || t[8] !== e.isLoading || t[9] !== i ? (f = () => {
15
+ i(e.id, {
16
16
  isLoading: e.isLoading ?? !1,
17
17
  isFetching: e.isFetching ?? !1,
18
18
  error: e.error
19
19
  });
20
- }, l = [e.id, e.isLoading, e.isFetching, e.error, t], i[5] = e.error, i[6] = e.id, i[7] = e.isFetching, i[8] = e.isLoading, i[9] = t, i[10] = c, i[11] = l) : (c = i[10], l = i[11]), n(c, l);
21
- let f, u;
22
- i[12] !== e.config || i[13] !== e.id || i[14] !== t ? (f = () => {
23
- e.config && t(e.id, {
20
+ }, g = [e.id, e.isLoading, e.isFetching, e.error, i], t[5] = e.error, t[6] = e.id, t[7] = e.isFetching, t[8] = e.isLoading, t[9] = i, t[10] = f, t[11] = g) : (f = t[10], g = t[11]), n(f, g);
21
+ let l, u;
22
+ t[12] !== e.config || t[13] !== e.id || t[14] !== i ? (l = () => {
23
+ e.config && i(e.id, {
24
24
  ...e.config
25
25
  });
26
- }, u = [e.id, e.config, t], i[12] = e.config, i[13] = e.id, i[14] = t, i[15] = f, i[16] = u) : (f = i[15], u = i[16]), n(f, u);
27
- let m, b;
28
- i[17] !== d || i[18] !== e.data || i[19] !== e.id ? (m = () => {
26
+ }, u = [e.id, e.config, i], t[12] = e.config, t[13] = e.id, t[14] = i, t[15] = l, t[16] = u) : (l = t[15], u = t[16]), n(l, u);
27
+ let m, r;
28
+ t[17] !== d || t[18] !== e.data || t[19] !== e.id ? (m = () => {
29
29
  d(e.id, e.data);
30
- }, b = [e.id, e.data, d], i[17] = d, i[18] = e.data, i[19] = e.id, i[20] = m, i[21] = b) : (m = i[20], b = i[21]), n(m, b);
31
- let h, y;
32
- return i[22] !== d || i[23] !== e.data || i[24] !== e.id ? (h = () => {
33
- let T = L.getState().widgets[e.id]?.registeredTools;
34
- return L.subscribe((W) => {
35
- const F = W.widgets[e.id]?.registeredTools;
36
- F !== T && (T = F, d(e.id, e.data));
30
+ }, r = [e.id, e.data, d], t[17] = d, t[18] = e.data, t[19] = e.id, t[20] = m, t[21] = r) : (m = t[20], r = t[21]), n(m, r);
31
+ let y, b;
32
+ return t[22] !== d || t[23] !== e.data || t[24] !== e.id ? (y = () => {
33
+ let L = h.getState().widgets[e.id]?.registeredTools;
34
+ return h.subscribe((F) => {
35
+ const T = F.widgets[e.id]?.registeredTools;
36
+ T !== L && (L = T, d(e.id, e.data));
37
37
  });
38
- }, y = [e.id, e.data, d], i[22] = d, i[23] = e.data, i[24] = e.id, i[25] = h, i[26] = y) : (h = i[25], y = i[26]), n(h, y), e.children;
38
+ }, b = [e.id, e.data, d], t[22] = d, t[23] = e.data, t[24] = e.id, t[25] = y, t[26] = b) : (y = t[25], b = t[26]), n(y, b), e.children;
39
39
  }
40
40
  function _(e) {
41
41
  return e.executeToolPipeline;
42
42
  }
43
- function w(e) {
43
+ function v(e) {
44
44
  return e.setWidget;
45
45
  }
46
- function $(...e) {
46
+ function $(e, t, i) {
47
+ return typeof e == "function" ? e(t, i) : e;
48
+ }
49
+ function j(...e) {
47
50
  return x(e[0] ?? {}, e[1] ?? {}, {
48
- arrayMerge(i, t) {
49
- return t;
51
+ arrayMerge(t, i) {
52
+ return i;
50
53
  }
51
54
  });
52
55
  }
53
56
  export {
54
57
  M as WidgetLoader,
55
- $ as mergeWidgetConfig
58
+ j as mergeWidgetConfig,
59
+ $ as resolveConfig
56
60
  };
57
61
  //# sourceMappingURL=loader.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"loader.js","sources":["../../src/widgets/loader/loader.tsx","../../src/widgets/loader/utils.ts"],"sourcesContent":["import { useEffect } from 'react'\nimport type { WidgetLoaderProps } from './types'\nimport { useWidgetStore } from '../stores/widget-store'\nimport type { WrapperState } from '../wrapper'\n\nexport function WidgetLoader<T>(props: WidgetLoaderProps<T>) {\n const setWidget = useWidgetStore((state) => state.setWidget)\n const executeToolPipeline = useWidgetStore(\n (state) => state.executeToolPipeline,\n )\n\n // Split into 3 effects for metadata and 1 for data pipeline:\n // Each property that can be modified independently gets its own effect to avoid\n // accidentally resetting other properties.\n //\n // - Effect 1: Type (can be modified by tools that change visualization type)\n // - Effect 2: Loading/Error states (change during fetch lifecycle)\n // - Effect 3: Config (can be modified by tools that change widget configuration)\n // - Effect 4: Data pipeline execution (transforms data through registered tools)\n // - Effect 5: Re-execute pipeline when tool state changes\n\n // Effect 1: Type updates\n useEffect(() => {\n setWidget<WrapperState>(props.id, {\n type: props.type,\n })\n }, [props.id, props.type, setWidget])\n\n // Effect 2: Loading and error states\n useEffect(() => {\n setWidget<WrapperState>(props.id, {\n isLoading: props.isLoading ?? false,\n isFetching: props.isFetching ?? false,\n error: props.error,\n })\n }, [props.id, props.isLoading, props.isFetching, props.error, setWidget])\n\n // Effect 3: Config updates\n useEffect(() => {\n if (props.config) {\n setWidget<WrapperState>(props.id, {\n ...props.config,\n })\n }\n }, [props.id, props.config, setWidget])\n\n // Effect 4: Execute tool pipeline when props.data changes\n useEffect(() => {\n void executeToolPipeline(props.id, props.data)\n }, [props.id, props.data, executeToolPipeline])\n\n // Effect 5: Re-execute pipeline when tool state changes (enabled/config)\n useEffect(() => {\n let prevTools = useWidgetStore.getState().widgets[props.id]?.registeredTools\n\n const unsubscribe = useWidgetStore.subscribe((state) => {\n const currentTools = state.widgets[props.id]?.registeredTools\n\n // Only re-execute if tools array changed\n if (currentTools !== prevTools) {\n prevTools = currentTools\n void executeToolPipeline(props.id, props.data)\n }\n })\n\n return unsubscribe\n }, [props.id, props.data, executeToolPipeline])\n\n return props.children\n}\n","import deepmerge from 'deepmerge'\n\nexport function mergeWidgetConfig<T>(\n ...options: [Partial<T> | undefined, Partial<T> | undefined]\n): T {\n return deepmerge(options[0] ?? {}, options[1] ?? {}, {\n arrayMerge(_, source) {\n return source as T[keyof T][]\n },\n })\n}\n"],"names":["WidgetLoader","props","$","_c","setWidget","useWidgetStore","_temp","executeToolPipeline","_temp2","t0","t1","id","type","useEffect","t2","t3","error","isFetching","isLoading","t4","t5","config","t6","t7","data","t8","t9","prevTools","getState","widgets","registeredTools","subscribe","state_1","currentTools","state","children","state_0","mergeWidgetConfig","options","deepmerge","arrayMerge","_","source"],"mappings":"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"}
1
+ {"version":3,"file":"loader.js","sources":["../../src/widgets/loader/loader.tsx","../../src/widgets/loader/utils.ts"],"sourcesContent":["import { useEffect } from 'react'\nimport type { WidgetLoaderProps } from './types'\nimport { useWidgetStore } from '../stores/widget-store'\nimport type { WrapperState } from '../wrapper'\n\nexport function WidgetLoader<T>(props: WidgetLoaderProps<T>) {\n const setWidget = useWidgetStore((state) => state.setWidget)\n const executeToolPipeline = useWidgetStore(\n (state) => state.executeToolPipeline,\n )\n\n // Split into 3 effects for metadata and 1 for data pipeline:\n // Each property that can be modified independently gets its own effect to avoid\n // accidentally resetting other properties.\n //\n // - Effect 1: Type (can be modified by tools that change visualization type)\n // - Effect 2: Loading/Error states (change during fetch lifecycle)\n // - Effect 3: Config (can be modified by tools that change widget configuration)\n // - Effect 4: Data pipeline execution (transforms data through registered tools)\n // - Effect 5: Re-execute pipeline when tool state changes\n\n // Effect 1: Type updates\n useEffect(() => {\n setWidget<WrapperState>(props.id, {\n type: props.type,\n })\n }, [props.id, props.type, setWidget])\n\n // Effect 2: Loading and error states\n useEffect(() => {\n setWidget<WrapperState>(props.id, {\n isLoading: props.isLoading ?? false,\n isFetching: props.isFetching ?? false,\n error: props.error,\n })\n }, [props.id, props.isLoading, props.isFetching, props.error, setWidget])\n\n // Effect 3: Config updates\n useEffect(() => {\n if (props.config) {\n setWidget<WrapperState>(props.id, {\n ...props.config,\n })\n }\n }, [props.id, props.config, setWidget])\n\n // Effect 4: Execute tool pipeline when props.data changes\n useEffect(() => {\n void executeToolPipeline(props.id, props.data)\n }, [props.id, props.data, executeToolPipeline])\n\n // Effect 5: Re-execute pipeline when tool state changes (enabled/config)\n useEffect(() => {\n let prevTools = useWidgetStore.getState().widgets[props.id]?.registeredTools\n\n const unsubscribe = useWidgetStore.subscribe((state) => {\n const currentTools = state.widgets[props.id]?.registeredTools\n\n // Only re-execute if tools array changed\n if (currentTools !== prevTools) {\n prevTools = currentTools\n void executeToolPipeline(props.id, props.data)\n }\n })\n\n return unsubscribe\n }, [props.id, props.data, executeToolPipeline])\n\n return props.children\n}\n","import deepmerge from 'deepmerge'\n\n/**\n * Config can be either an object or a function that receives baseConfig and data\n * and returns a partial config to be merged with the base.\n */\nexport type ConfigOrFn<TConfig, TData = unknown> =\n | Partial<TConfig>\n | ((baseConfig: TConfig, data: TData) => Partial<TConfig>)\n\n/**\n * Resolves a config that may be either an object or a function.\n * If it's a function, calls it with baseConfig and data.\n * If it's an object (or undefined), returns it as-is.\n */\nexport function resolveConfig<TConfig, TData>(\n config: ConfigOrFn<TConfig, TData> | undefined,\n baseConfig: TConfig,\n data: TData,\n): Partial<TConfig> | undefined {\n if (typeof config === 'function') {\n return config(baseConfig, data)\n }\n return config\n}\n\nexport function mergeWidgetConfig<T>(\n ...options: [Partial<T> | undefined, Partial<T> | undefined]\n): T {\n return deepmerge(options[0] ?? {}, options[1] ?? {}, {\n arrayMerge(_, source) {\n return source as T[keyof T][]\n },\n })\n}\n"],"names":["WidgetLoader","props","$","_c","setWidget","useWidgetStore","_temp","executeToolPipeline","_temp2","t0","t1","id","type","useEffect","t2","t3","error","isFetching","isLoading","t4","t5","config","t6","t7","data","t8","t9","prevTools","getState","widgets","registeredTools","subscribe","state_1","currentTools","state","children","state_0","resolveConfig","baseConfig","mergeWidgetConfig","options","deepmerge","arrayMerge","_","source"],"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.3.0",
3
+ "version": "4.3.1",
4
4
  "description": "CARTO's Professional Service React Material library",
5
5
  "type": "module",
6
6
  "devDependencies": {