@carto/ps-react-ui 4.3.9 → 4.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (121) hide show
  1. package/dist/components.js +692 -700
  2. package/dist/components.js.map +1 -1
  3. package/dist/{lasso-tool-jl4YK02H.js → lasso-tool-BYbxrJ-7.js} +184 -190
  4. package/dist/lasso-tool-BYbxrJ-7.js.map +1 -0
  5. package/dist/{row-BKmVAUN5.js → row-DTCV0Ocm.js} +2 -2
  6. package/dist/row-DTCV0Ocm.js.map +1 -0
  7. package/dist/{series-D1pynfeh.js → series-CYNOu2Ju.js} +2 -2
  8. package/dist/{series-D1pynfeh.js.map → series-CYNOu2Ju.js.map} +1 -1
  9. package/dist/smart-tooltip-D4vwQpFf.js +37 -0
  10. package/dist/smart-tooltip-D4vwQpFf.js.map +1 -0
  11. package/dist/{styles-DrPyd0y5.js → styles-CAroD5Rc.js} +12 -12
  12. package/dist/styles-CAroD5Rc.js.map +1 -0
  13. package/dist/types/hooks/use-widget-ref.d.ts +5 -2
  14. package/dist/types/widgets/_shared/chart-config/option-builders.d.ts +1 -1
  15. package/dist/types/widgets/actions/brush-toggle/brush-toggle.d.ts +21 -0
  16. package/dist/types/widgets/actions/{relative-data → brush-toggle}/style.d.ts +5 -0
  17. package/dist/types/widgets/actions/brush-toggle/types.d.ts +33 -0
  18. package/dist/types/widgets/actions/index.d.ts +2 -0
  19. package/dist/types/widgets/category/config.d.ts +3 -10
  20. package/dist/types/widgets/echart/types.d.ts +2 -1
  21. package/dist/types/widgets/echart/utils.d.ts +12 -6
  22. package/dist/types/widgets/range/config.d.ts +0 -4
  23. package/dist/types/widgets/spread/config.d.ts +0 -5
  24. package/dist/types/widgets/table/config.d.ts +1 -2
  25. package/dist/types/widgets/table/table-ui.d.ts +1 -1
  26. package/dist/types/widgets/wrapper/components/options.d.ts +1 -1
  27. package/dist/use-widget-ref-wtFLDFCD.js +25 -0
  28. package/dist/use-widget-ref-wtFLDFCD.js.map +1 -0
  29. package/dist/{utils-idmvq0Oa.js → utils-Cx3gYUcL.js} +74 -68
  30. package/dist/utils-Cx3gYUcL.js.map +1 -0
  31. package/dist/widgets/actions.js +788 -700
  32. package/dist/widgets/actions.js.map +1 -1
  33. package/dist/widgets/bar.js +48 -49
  34. package/dist/widgets/bar.js.map +1 -1
  35. package/dist/widgets/category.js +28 -28
  36. package/dist/widgets/category.js.map +1 -1
  37. package/dist/widgets/echart.js +85 -82
  38. package/dist/widgets/echart.js.map +1 -1
  39. package/dist/widgets/formula.js +7 -5
  40. package/dist/widgets/formula.js.map +1 -1
  41. package/dist/widgets/histogram.js +50 -50
  42. package/dist/widgets/histogram.js.map +1 -1
  43. package/dist/widgets/markdown.js +1 -1
  44. package/dist/widgets/pie.js +10 -10
  45. package/dist/widgets/pie.js.map +1 -1
  46. package/dist/widgets/range.js +1 -1
  47. package/dist/widgets/range.js.map +1 -1
  48. package/dist/widgets/scatterplot.js +14 -14
  49. package/dist/widgets/scatterplot.js.map +1 -1
  50. package/dist/widgets/spread.js +7 -5
  51. package/dist/widgets/spread.js.map +1 -1
  52. package/dist/widgets/table.js +5 -3
  53. package/dist/widgets/table.js.map +1 -1
  54. package/dist/widgets/timeseries.js +4 -4
  55. package/dist/widgets/timeseries.js.map +1 -1
  56. package/dist/widgets/wrapper.js +152 -162
  57. package/dist/widgets/wrapper.js.map +1 -1
  58. package/dist/widgets.js +1 -1
  59. package/package.json +1 -1
  60. package/src/components/basemaps/basemaps.tsx +3 -1
  61. package/src/components/geolocation-controls/geolocation-controls.tsx +10 -6
  62. package/src/components/lasso-tool/lasso-tool-inline.tsx +6 -2
  63. package/src/components/lasso-tool/lasso-tool.tsx +9 -3
  64. package/src/components/list-data/list-data-skeleton.tsx +1 -1
  65. package/src/components/list-data/list-data.tsx +5 -3
  66. package/src/components/measurement-tools/measurement-tools.tsx +5 -1
  67. package/src/components/smart-tooltip/smart-tooltip.tsx +3 -1
  68. package/src/hooks/use-widget-ref.ts +4 -3
  69. package/src/widgets/_shared/chart-config/option-builders.test.ts +2 -2
  70. package/src/widgets/_shared/chart-config/option-builders.ts +6 -4
  71. package/src/widgets/actions/brush-toggle/brush-toggle.tsx +220 -0
  72. package/src/widgets/actions/{relative-data → brush-toggle}/style.ts +5 -0
  73. package/src/widgets/actions/brush-toggle/types.ts +37 -0
  74. package/src/widgets/actions/download/download.test.tsx +6 -2
  75. package/src/widgets/actions/download/download.tsx +3 -1
  76. package/src/widgets/actions/fullscreen/fullscreen.tsx +8 -1
  77. package/src/widgets/actions/index.ts +9 -0
  78. package/src/widgets/actions/lock-selection/lock-selection.tsx +0 -9
  79. package/src/widgets/actions/relative-data/relative-data.tsx +2 -6
  80. package/src/widgets/actions/searcher/searcher.tsx +0 -6
  81. package/src/widgets/actions/stack-toggle/stack-toggle.test.tsx +4 -4
  82. package/src/widgets/actions/stack-toggle/stack-toggle.tsx +2 -13
  83. package/src/widgets/actions/zoom-toggle/zoom-toggle.tsx +2 -12
  84. package/src/widgets/bar/config.ts +8 -4
  85. package/src/widgets/bar/skeleton.tsx +1 -1
  86. package/src/widgets/category/components/category-row-multi.tsx +1 -1
  87. package/src/widgets/category/config.ts +1 -11
  88. package/src/widgets/echart/echart-ui.tsx +5 -2
  89. package/src/widgets/echart/echart.tsx +1 -1
  90. package/src/widgets/echart/types.ts +2 -1
  91. package/src/widgets/echart/utils.ts +20 -15
  92. package/src/widgets/formula/components/row.tsx +1 -1
  93. package/src/widgets/formula/formula-ui.tsx +1 -1
  94. package/src/widgets/histogram/config.ts +7 -2
  95. package/src/widgets/histogram/skeleton.tsx +2 -2
  96. package/src/widgets/pie/skeleton.tsx +1 -1
  97. package/src/widgets/range/config.ts +0 -5
  98. package/src/widgets/scatterplot/skeleton.tsx +2 -2
  99. package/src/widgets/spread/config.ts +0 -6
  100. package/src/widgets/spread/spread-ui.tsx +1 -1
  101. package/src/widgets/table/config.ts +1 -1
  102. package/src/widgets/table/table-ui.tsx +2 -2
  103. package/src/widgets/timeseries/skeleton.tsx +1 -1
  104. package/src/widgets/wrapper/components/actions.test.tsx +6 -2
  105. package/src/widgets/wrapper/components/actions.tsx +3 -1
  106. package/src/widgets/wrapper/components/options.test.tsx +12 -4
  107. package/src/widgets/wrapper/components/options.tsx +8 -3
  108. package/src/widgets/wrapper/wrapper-ui.tsx +5 -2
  109. package/src/widgets/wrapper/wrapper.tsx +2 -4
  110. package/dist/lasso-tool-jl4YK02H.js.map +0 -1
  111. package/dist/row-BKmVAUN5.js.map +0 -1
  112. package/dist/smart-tooltip-BEtBaIdz.js +0 -39
  113. package/dist/smart-tooltip-BEtBaIdz.js.map +0 -1
  114. package/dist/styles-DrPyd0y5.js.map +0 -1
  115. package/dist/types/widgets/actions/zoom-toggle/index.d.ts +0 -2
  116. package/dist/types/widgets/table/components/index.d.ts +0 -4
  117. package/dist/use-widget-ref-P-2i0MJG.js +0 -19
  118. package/dist/use-widget-ref-P-2i0MJG.js.map +0 -1
  119. package/dist/utils-idmvq0Oa.js.map +0 -1
  120. package/src/widgets/actions/zoom-toggle/index.ts +0 -2
  121. package/src/widgets/table/components/index.ts +0 -4
@@ -1,119 +1,122 @@
1
- import { jsx as I } from "react/jsx-runtime";
2
- import { c as k } from "react/compiler-runtime";
3
- import { useRef as w, useImperativeHandle as Z, useEffect as S } from "react";
4
- import * as $ from "echarts";
5
- import { u as B } from "../use-widget-ref-P-2i0MJG.js";
1
+ import { jsx as k } from "react/jsx-runtime";
2
+ import { c as U } from "react/compiler-runtime";
3
+ import { useRef as w, useImperativeHandle as $, useEffect as x } from "react";
4
+ import * as B from "echarts";
5
+ import { u as D } from "../use-widget-ref-wtFLDFCD.js";
6
6
  import { u as b } from "../widget-store-CzDt8oSK.js";
7
- import { useShallow as j } from "zustand/shallow";
8
- import { g as P } from "../options-D9wflre6.js";
9
- import { g as T, a as V, b as X, m as Y } from "../utils-idmvq0Oa.js";
10
- function D(t) {
11
- const e = k(20), {
7
+ import { useShallow as y } from "zustand/shallow";
8
+ import { g as Q } from "../options-D9wflre6.js";
9
+ import { g as V, a as X, b as Y, m as p } from "../utils-Cx3gYUcL.js";
10
+ function H(t) {
11
+ const e = U(21), {
12
12
  id: s,
13
- ref: x,
13
+ ref: I,
14
14
  init: o,
15
- option: g,
16
- className: m,
15
+ option: m,
16
+ className: h,
17
17
  style: E,
18
- onEvents: c
19
- } = t, n = B(s), i = w(null), h = w(null);
20
- let u, f;
21
- e[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (u = () => i.current, f = [], e[0] = u, e[1] = f) : (u = e[0], f = e[1]), Z(x, u, f);
22
- let l, d;
23
- e[2] !== n || e[3] !== o ? (l = () => {
18
+ onEvents: u
19
+ } = t, {
20
+ ref: n,
21
+ instance: l
22
+ } = D(s), r = w(null), f = w(null);
23
+ let d, c;
24
+ e[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (d = () => r.current, c = [], e[0] = d, e[1] = c) : (d = e[0], c = e[1]), $(I, d, c);
25
+ let a, v;
26
+ e[2] !== l || e[3] !== n || e[4] !== o ? (a = () => {
24
27
  if (n.current)
25
- return i.current = $.init(n.current, null, {
28
+ return r.current = B.init(n.current, null, {
26
29
  renderer: "svg",
27
30
  height: 304,
28
31
  ...o
29
- }), () => {
30
- i.current?.dispose(), i.current = null;
32
+ }), l.current = r.current, () => {
33
+ r.current?.dispose(), r.current = null, l.current = null;
31
34
  };
32
- }, d = [n, o], e[2] = n, e[3] = o, e[4] = l, e[5] = d) : (l = e[4], d = e[5]), S(l, d);
33
- let v, a;
34
- e[6] !== g ? (v = () => {
35
- i.current?.setOption(g, {
35
+ }, v = [l, n, o], e[2] = l, e[3] = n, e[4] = o, e[5] = a, e[6] = v) : (a = e[5], v = e[6]), x(a, v);
36
+ let g, i;
37
+ e[7] !== m ? (g = () => {
38
+ r.current?.setOption(m, {
36
39
  lazyUpdate: !0,
37
40
  notMerge: !0
38
41
  });
39
- }, a = [g], e[6] = g, e[7] = v, e[8] = a) : (v = e[7], a = e[8]), S(v, a);
40
- let r, W;
41
- e[9] !== n ? (r = () => {
42
+ }, i = [m], e[7] = m, e[8] = g, e[9] = i) : (g = e[8], i = e[9]), x(g, i);
43
+ let W, O;
44
+ e[10] !== n ? (W = () => {
42
45
  const C = () => {
43
- i.current?.resize();
46
+ r.current?.resize();
44
47
  };
45
- return h.current = new ResizeObserver(C), h.current.observe(n.current), () => {
46
- h.current?.disconnect(), h.current = null;
48
+ return f.current = new ResizeObserver(C), f.current.observe(n.current), () => {
49
+ f.current?.disconnect(), f.current = null;
47
50
  };
48
- }, W = [n], e[9] = n, e[10] = r, e[11] = W) : (r = e[10], W = e[11]), S(r, W);
49
- let O, R;
50
- e[12] !== c ? (O = () => {
51
+ }, O = [n], e[10] = n, e[11] = W, e[12] = O) : (W = e[11], O = e[12]), x(W, O);
52
+ let R, z;
53
+ e[13] !== u ? (R = () => {
51
54
  const C = {
52
- ...c ?? {}
55
+ ...u ?? {}
53
56
  };
54
57
  return C.click || (C.mousemove = () => {
55
- i.current?.getZr().setCursorStyle("default");
56
- }), Object.entries(C).forEach((y) => {
57
- const [_, U] = y;
58
- i.current?.on(_, U);
58
+ r.current?.getZr().setCursorStyle("default");
59
+ }), Object.entries(C).forEach((_) => {
60
+ const [j, Z] = _;
61
+ r.current?.on(j, Z);
59
62
  }), () => {
60
- Object.entries(C).forEach((y) => {
61
- const [_] = y;
62
- i.current?.off(_);
63
+ Object.entries(C).forEach((_) => {
64
+ const [j] = _;
65
+ r.current?.off(j);
63
66
  });
64
67
  };
65
- }, R = [c], e[12] = c, e[13] = O, e[14] = R) : (O = e[13], R = e[14]), S(O, R);
66
- let z;
67
- return e[15] !== n || e[16] !== m || e[17] !== s || e[18] !== E ? (z = /* @__PURE__ */ I("div", { id: s, ref: n, style: E, className: m }), e[15] = n, e[16] = m, e[17] = s, e[18] = E, e[19] = z) : z = e[19], z;
68
+ }, z = [u], e[13] = u, e[14] = R, e[15] = z) : (R = e[14], z = e[15]), x(R, z);
69
+ let S;
70
+ return e[16] !== n || e[17] !== h || e[18] !== s || e[19] !== E ? (S = /* @__PURE__ */ k("div", { id: s, ref: n, style: E, className: h }), e[16] = n, e[17] = h, e[18] = s, e[19] = E, e[20] = S) : S = e[20], S;
68
71
  }
69
- function J(t) {
70
- const e = k(22);
72
+ function K(t) {
73
+ const e = U(22);
71
74
  let s;
72
- e[0] !== t.id ? (s = (r) => r.getWidget(t.id)?.id, e[0] = t.id, e[1] = s) : s = e[1];
73
- const x = b(s);
75
+ e[0] !== t.id ? (s = (i) => i.getWidget(t.id)?.id, e[0] = t.id, e[1] = s) : s = e[1];
76
+ const I = b(y(s));
74
77
  let o;
75
- e[2] !== t.id ? (o = (r) => r.getWidget(t.id)?.data, e[2] = t.id, e[3] = o) : o = e[3];
76
- const g = b(j(o));
77
- let m;
78
- e[4] !== t.id ? (m = (r) => r.getWidget(t.id)?.option, e[4] = t.id, e[5] = m) : m = e[5];
79
- const E = b(j(m));
80
- let c;
81
- e[6] !== t.id ? (c = (r) => r.getWidget(t.id)?.onEvents, e[6] = t.id, e[7] = c) : c = e[7];
82
- const n = b(j(c));
83
- let i;
84
- e[8] !== t.id ? (i = (r) => r.getWidget(t.id)?.init, e[8] = t.id, e[9] = i) : i = e[9];
85
- const h = b(i);
78
+ e[2] !== t.id ? (o = (i) => i.getWidget(t.id)?.data, e[2] = t.id, e[3] = o) : o = e[3];
79
+ const m = b(y(o));
80
+ let h;
81
+ e[4] !== t.id ? (h = (i) => i.getWidget(t.id)?.option, e[4] = t.id, e[5] = h) : h = e[5];
82
+ const E = b(y(h));
86
83
  let u;
87
- e[10] !== g ? (u = H(g), e[10] = g, e[11] = u) : u = e[11];
88
- const f = u;
84
+ e[6] !== t.id ? (u = (i) => i.getWidget(t.id)?.onEvents, e[6] = t.id, e[7] = u) : u = e[7];
85
+ const n = b(y(u));
89
86
  let l;
90
- e[12] !== f ? (l = f && {
91
- dataset: f
92
- }, e[12] = f, e[13] = l) : l = e[13];
93
- let d;
94
- e[14] !== l || e[15] !== E ? (d = {
87
+ e[8] !== t.id ? (l = (i) => i.getWidget(t.id)?.init, e[8] = t.id, e[9] = l) : l = e[9];
88
+ const r = b(l);
89
+ let f;
90
+ e[10] !== m ? (f = M(m), e[10] = m, e[11] = f) : f = e[11];
91
+ const d = f;
92
+ let c;
93
+ e[12] !== d ? (c = d && {
94
+ dataset: d
95
+ }, e[12] = d, e[13] = c) : c = e[13];
96
+ let a;
97
+ e[14] !== c || e[15] !== E ? (a = {
95
98
  ...E,
96
- ...l
97
- }, e[14] = l, e[15] = E, e[16] = d) : d = e[16];
98
- const v = d;
99
- if (!x)
99
+ ...c
100
+ }, e[14] = c, e[15] = E, e[16] = a) : a = e[16];
101
+ const v = a;
102
+ if (!I)
100
103
  return null;
101
- let a;
102
- return e[17] !== h || e[18] !== n || e[19] !== v || e[20] !== t.id ? (a = /* @__PURE__ */ I(D, { id: t.id, option: v, onEvents: n, init: h }), e[17] = h, e[18] = n, e[19] = v, e[20] = t.id, e[21] = a) : a = e[21], a;
104
+ let g;
105
+ return e[17] !== r || e[18] !== n || e[19] !== v || e[20] !== t.id ? (g = /* @__PURE__ */ k(H, { id: t.id, option: v, onEvents: n, init: r }), e[17] = r, e[18] = n, e[19] = v, e[20] = t.id, e[21] = g) : g = e[21], g;
103
106
  }
104
- function H(t) {
107
+ function M(t) {
105
108
  if (!(!t || t.length === 0))
106
109
  return t.map((e) => ({
107
110
  source: e
108
111
  }));
109
112
  }
110
113
  export {
111
- J as Echart,
112
- D as EchartUI,
113
- P as getCommonOptions,
114
- T as getEChartBrushConfig,
115
- V as getEChartStackConfig,
116
- X as getEChartZoomConfig,
117
- Y as mergeEchartWidgetConfig
114
+ K as Echart,
115
+ H as EchartUI,
116
+ Q as getCommonOptions,
117
+ V as getEChartBrushConfig,
118
+ X as getEChartStackConfig,
119
+ Y as getEChartZoomConfig,
120
+ p as mergeEchartWidgetConfig
118
121
  };
119
122
  //# sourceMappingURL=echart.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"echart.js","sources":["../../src/widgets/echart/echart-ui.tsx","../../src/widgets/echart/echart.tsx"],"sourcesContent":["import { useEffect, useRef, useImperativeHandle } from 'react'\nimport * as echarts from 'echarts'\nimport type { EchartUIProps } from './types'\nimport { useWidgetRef } from '../../hooks'\n\nexport function EchartUI(props: EchartUIProps) {\n const { id, ref, init, option, className, style, onEvents } = props\n\n const chartRef = useWidgetRef<HTMLDivElement>(id)\n const chartInstance = useRef<echarts.ECharts>(null)\n const resizeObserverRef = useRef<ResizeObserver | null>(null)\n\n useImperativeHandle(ref, () => chartInstance.current!, [])\n\n useEffect(() => {\n if (!chartRef.current) return\n\n chartInstance.current = echarts.init(chartRef.current, null, {\n renderer: 'svg',\n height: 304,\n ...init,\n })\n // Cleanup function\n return () => {\n chartInstance.current?.dispose()\n chartInstance.current = null\n }\n }, [chartRef, init])\n\n // Update chart when options change\n useEffect(() => {\n chartInstance.current?.setOption(option, {\n lazyUpdate: true,\n notMerge: true,\n })\n }, [option])\n\n // Handle resize using ResizeObserver\n useEffect(() => {\n const handleResize = () => {\n chartInstance.current?.resize()\n }\n\n resizeObserverRef.current = new ResizeObserver(handleResize)\n resizeObserverRef.current.observe(chartRef.current!)\n\n return () => {\n resizeObserverRef.current?.disconnect()\n resizeObserverRef.current = null\n }\n }, [chartRef])\n\n useEffect(() => {\n const _onEvents = { ...(onEvents ?? {}) }\n if (!_onEvents.click) {\n _onEvents.mousemove = () => {\n chartInstance.current?.getZr().setCursorStyle('default')\n }\n }\n\n // Attach event listeners\n Object.entries(_onEvents).forEach(([event, handler]) => {\n chartInstance.current?.on(event, handler)\n })\n // Cleanup function to remove event listeners\n return () => {\n Object.entries(_onEvents).forEach(([event]) => {\n chartInstance.current?.off(event)\n })\n }\n }, [onEvents])\n\n return <div id={id} ref={chartRef} style={style} className={className} />\n}\n","import type {\n EchartProps,\n EchartWidgetState,\n EchartWidgetData,\n EchartOptionsProps,\n} from './types'\nimport { EchartUI } from './echart-ui'\nimport { useWidgetStore } from '../stores/widget-store'\nimport { useShallow } from 'zustand/shallow'\nimport { useMemo } from 'react'\n\nexport function Echart(props: EchartProps) {\n const id = useWidgetStore(\n (state) => state.getWidget<EchartWidgetState>(props.id)?.id,\n )\n\n const data = useWidgetStore(\n useShallow(\n (state) =>\n state.getWidget<EchartWidgetState>(props.id)?.data as\n | EchartWidgetData\n | undefined,\n ),\n )\n\n const widgetOption = useWidgetStore(\n useShallow((state) => state.getWidget<EchartWidgetState>(props.id)?.option),\n )\n\n const onEvents = useWidgetStore(\n useShallow(\n (state) => state.getWidget<EchartWidgetState>(props.id)?.onEvents,\n ),\n )\n\n const init = useWidgetStore(\n (state) => state.getWidget<EchartWidgetState>(props.id)?.init,\n )\n\n // Memoize dataset transformation to avoid re-computing on every render\n const dataset = useMemo(() => buildDataset(data), [data])\n\n const option = useMemo<EchartOptionsProps>(\n () => ({\n ...widgetOption,\n ...(dataset && { dataset }),\n }),\n [widgetOption, dataset],\n )\n\n if (!id) {\n return null\n }\n\n return (\n <EchartUI id={props.id} option={option} onEvents={onEvents} init={init} />\n )\n}\n\n/**\n * Builds the dataset configuration from widget data\n * @param data - The widget data array\n * @returns The dataset configuration for ECharts\n */\nfunction buildDataset(\n data: EchartWidgetData | undefined,\n): EchartOptionsProps['dataset'] {\n if (!data || data.length === 0) {\n return undefined\n }\n\n return data.map((d) => ({\n source: d,\n }))\n}\n"],"names":["EchartUI","props","$","_c","id","ref","init","option","className","style","onEvents","chartRef","useWidgetRef","chartInstance","useRef","resizeObserverRef","t0","t1","Symbol","for","current","useImperativeHandle","t2","t3","echarts","renderer","height","dispose","useEffect","t4","t5","setOption","lazyUpdate","notMerge","t6","t7","handleResize","resize","ResizeObserver","observe","disconnect","t8","t9","_onEvents","click","mousemove","getZr","setCursorStyle","Object","entries","forEach","t10","event","handler","on","t11","event_0","off","Echart","state","getWidget","useWidgetStore","state_0","data","useShallow","state_1","widgetOption","state_2","state_3","buildDataset","dataset","length","map","d","source"],"mappings":"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"}
1
+ {"version":3,"file":"echart.js","sources":["../../src/widgets/echart/echart-ui.tsx","../../src/widgets/echart/echart.tsx"],"sourcesContent":["import { useEffect, useRef, useImperativeHandle } from 'react'\nimport * as echarts from 'echarts'\nimport type { EchartUIProps } from './types'\nimport { useWidgetRef } from '../../hooks'\n\nexport function EchartUI(props: EchartUIProps) {\n const { id, ref, init, option, className, style, onEvents } = props\n\n const { ref: chartRef, instance: chartInstanceRef } =\n useWidgetRef<HTMLDivElement>(id)\n const chartInstance = useRef<echarts.ECharts>(null)\n const resizeObserverRef = useRef<ResizeObserver | null>(null)\n\n useImperativeHandle(ref, () => chartInstance.current!, [])\n\n useEffect(() => {\n if (!chartRef.current) return\n\n chartInstance.current = echarts.init(chartRef.current, null, {\n renderer: 'svg',\n height: 304,\n ...init,\n })\n chartInstanceRef.current = chartInstance.current\n // Cleanup function\n return () => {\n chartInstance.current?.dispose()\n chartInstance.current = null\n chartInstanceRef.current = null\n }\n }, [chartInstanceRef, chartRef, init])\n\n // Update chart when options change\n useEffect(() => {\n chartInstance.current?.setOption(option, {\n lazyUpdate: true,\n notMerge: true,\n })\n }, [option])\n\n // Handle resize using ResizeObserver\n useEffect(() => {\n const handleResize = () => {\n chartInstance.current?.resize()\n }\n\n resizeObserverRef.current = new ResizeObserver(handleResize)\n resizeObserverRef.current.observe(chartRef.current!)\n\n return () => {\n resizeObserverRef.current?.disconnect()\n resizeObserverRef.current = null\n }\n }, [chartRef])\n\n useEffect(() => {\n const _onEvents = { ...(onEvents ?? {}) }\n if (!_onEvents.click) {\n _onEvents.mousemove = () => {\n chartInstance.current?.getZr().setCursorStyle('default')\n }\n }\n\n // Attach event listeners\n Object.entries(_onEvents).forEach(([event, handler]) => {\n chartInstance.current?.on(event, handler)\n })\n // Cleanup function to remove event listeners\n return () => {\n Object.entries(_onEvents).forEach(([event]) => {\n chartInstance.current?.off(event)\n })\n }\n }, [onEvents])\n\n return <div id={id} ref={chartRef} style={style} className={className} />\n}\n","import type {\n EchartProps,\n EchartWidgetState,\n EchartWidgetData,\n EchartOptionsProps,\n} from './types'\nimport { EchartUI } from './echart-ui'\nimport { useWidgetStore } from '../stores/widget-store'\nimport { useShallow } from 'zustand/shallow'\nimport { useMemo } from 'react'\n\nexport function Echart(props: EchartProps) {\n const id = useWidgetStore(\n useShallow((state) => state.getWidget<EchartWidgetState>(props.id)?.id),\n )\n\n const data = useWidgetStore(\n useShallow(\n (state) =>\n state.getWidget<EchartWidgetState>(props.id)?.data as\n | EchartWidgetData\n | undefined,\n ),\n )\n\n const widgetOption = useWidgetStore(\n useShallow((state) => state.getWidget<EchartWidgetState>(props.id)?.option),\n )\n\n const onEvents = useWidgetStore(\n useShallow(\n (state) => state.getWidget<EchartWidgetState>(props.id)?.onEvents,\n ),\n )\n\n const init = useWidgetStore(\n (state) => state.getWidget<EchartWidgetState>(props.id)?.init,\n )\n\n // Memoize dataset transformation to avoid re-computing on every render\n const dataset = useMemo(() => buildDataset(data), [data])\n\n const option = useMemo<EchartOptionsProps>(\n () => ({\n ...widgetOption,\n ...(dataset && { dataset }),\n }),\n [widgetOption, dataset],\n )\n\n if (!id) {\n return null\n }\n\n return (\n <EchartUI id={props.id} option={option} onEvents={onEvents} init={init} />\n )\n}\n\n/**\n * Builds the dataset configuration from widget data\n * @param data - The widget data array\n * @returns The dataset configuration for ECharts\n */\nfunction buildDataset(\n data: EchartWidgetData | undefined,\n): EchartOptionsProps['dataset'] {\n if (!data || data.length === 0) {\n return undefined\n }\n\n return data.map((d) => ({\n source: d,\n }))\n}\n"],"names":["EchartUI","props","$","_c","id","ref","init","option","className","style","onEvents","chartRef","instance","chartInstanceRef","useWidgetRef","chartInstance","useRef","resizeObserverRef","t0","t1","Symbol","for","current","useImperativeHandle","t2","t3","echarts","renderer","height","dispose","useEffect","t4","t5","setOption","lazyUpdate","notMerge","t6","t7","handleResize","resize","ResizeObserver","observe","disconnect","t8","t9","_onEvents","click","mousemove","getZr","setCursorStyle","Object","entries","forEach","t10","event","handler","on","t11","event_0","off","Echart","state","getWidget","useWidgetStore","useShallow","state_0","data","state_1","widgetOption","state_2","state_3","buildDataset","dataset","length","map","d","source"],"mappings":"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"}
@@ -1,20 +1,20 @@
1
- import { I, S as W, P as D, a as P } from "../series-D1pynfeh.js";
1
+ import { I, S as W, P as D, a as P } from "../series-CYNOu2Ju.js";
2
2
  import { jsx as f, jsxs as k, Fragment as C } from "react/jsx-runtime";
3
3
  import { c as w } from "react/compiler-runtime";
4
4
  import { u as h } from "../widget-store-CzDt8oSK.js";
5
5
  import { useShallow as S } from "zustand/shallow";
6
- import { R, s as T } from "../row-BKmVAUN5.js";
6
+ import { R, s as T } from "../row-DTCV0Ocm.js";
7
7
  import { Box as F, Skeleton as $ } from "@mui/material";
8
8
  import "@mui/icons-material";
9
9
  import "react";
10
10
  import "react-markdown";
11
11
  import { d as y, a as v } from "../exports-Cr43OCul.js";
12
- import "../lasso-tool-jl4YK02H.js";
12
+ import "../lasso-tool-BYbxrJ-7.js";
13
13
  import "../cjs-D4KH3azB.js";
14
14
  import "@dnd-kit/core";
15
15
  import "@dnd-kit/sortable";
16
16
  import "@dnd-kit/utilities";
17
- import { u as b } from "../use-widget-ref-P-2i0MJG.js";
17
+ import { u as b } from "../use-widget-ref-wtFLDFCD.js";
18
18
  const j = (e) => e.toString();
19
19
  function z(e) {
20
20
  const t = w(19);
@@ -61,7 +61,9 @@ function tt() {
61
61
  };
62
62
  }
63
63
  function et(e) {
64
- const t = w(8), i = b(e.id);
64
+ const t = w(8), {
65
+ ref: i
66
+ } = b(e.id);
65
67
  let o;
66
68
  t[0] !== e.id ? (o = (l) => {
67
69
  const {
@@ -1 +1 @@
1
- {"version":3,"file":"formula.js","sources":["../../src/widgets/formula/components/value.tsx","../../src/widgets/formula/config.ts","../../src/widgets/formula/formula-ui.tsx","../../src/widgets/formula/skeleton.tsx","../../src/widgets/formula/serializer.ts"],"sourcesContent":["import { type FormulaWidgetState, type ValueProps } from '../types'\nimport { useWidgetStore } from '../../stores/widget-store'\nimport { Item } from './item'\nimport { useShallow } from 'zustand/shallow'\n\nconst defaultFormatter = (value: number) => value.toString()\n\nexport function Value({ id, index = 0, ...props }: ValueProps) {\n const value = useWidgetStore(\n useShallow(\n (state) => state.getWidget<FormulaWidgetState>(id)?.data?.[index]?.value,\n ),\n )\n const color = useWidgetStore(\n useShallow(\n (state) => state.getWidget<FormulaWidgetState>(id)?.data?.[index]?.color,\n ),\n )\n const formatter =\n useWidgetStore(\n useShallow((state) => state.getWidget<FormulaWidgetState>(id)?.formatter),\n ) ?? defaultFormatter\n\n return (\n <Item TypographyProps={{ color }} {...props}>\n {formatter(value ?? 0)}\n </Item>\n )\n}\n","import { downloadToCSV, downloadToPNG } from '../actions'\nimport type { ConfigProps } from '../loader/types'\nimport type { FormulaDownloadConfig, FormulaWidgetConfig } from './types'\n\nexport function formulaDownloadConfig({\n refUI,\n}: ConfigProps): FormulaDownloadConfig {\n return [\n {\n ...downloadToPNG,\n modifier: () => downloadToPNG.modifier(refUI),\n },\n {\n ...downloadToCSV,\n modifier: async (data) => {\n const formulaData = [data?.map((item) => item.value) ?? []]\n return downloadToCSV.modifier(formulaData)\n },\n },\n ]\n}\n\nexport function formulaConfig(): FormulaWidgetConfig {\n return {\n series: [],\n }\n}\n","import type { FormulaUIProps } from './types'\nimport { Row } from './components/row'\nimport { Value } from './components/value'\nimport { Prefix } from './components/prefix'\nimport { Suffix } from './components/suffix'\nimport { Series } from './components/series'\nimport { useWidgetRef } from '../../hooks'\nimport { Box } from '@mui/material'\n\nexport function FormulaUI(props: FormulaUIProps) {\n const ref = useWidgetRef(props.id)\n\n return (\n <Box ref={ref}>\n <Row id={props.id}>\n {({ index }) => (\n <>\n <Series id={props.id} index={index} />\n <Prefix id={props.id} index={index} />\n <Value id={props.id} index={index} />\n <Suffix id={props.id} index={index} />\n </>\n )}\n </Row>\n </Box>\n )\n}\n","import { Box, Skeleton } from '@mui/material'\nimport { styles } from './style'\n\nexport function FormulaSkeleton() {\n return (\n <Box sx={styles.row} aria-label='Formula skeleton'>\n <Skeleton width={120} height={32} />\n </Box>\n )\n}\n","import type { DataItem } from './types'\n\n/**\n * Sanitizes DataItem by converting ReactNode prefix/suffix values to undefined.\n * This ensures only string values are stored in the widget state.\n *\n * @param item - The DataItem to sanitize\n * @returns A new DataItem with ReactNode prefix/suffix values converted to undefined\n */\nexport function sanitizeDataItem(item: DataItem): DataItem {\n return {\n ...item,\n prefix: typeof item.prefix === 'string' ? item.prefix : undefined,\n suffix: typeof item.suffix === 'string' ? item.suffix : undefined,\n }\n}\n\n/**\n * Sanitizes an array of DataItems by converting ReactNode prefix/suffix values to undefined.\n *\n * @param items - Array of DataItems to sanitize\n * @returns A new array with sanitized DataItems\n */\nexport function sanitizeDataItems(\n items: DataItem[] | undefined,\n): DataItem[] | undefined {\n return items?.map(sanitizeDataItem)\n}\n"],"names":["defaultFormatter","value","toString","Value","t0","$","_c","id","props","t1","index","undefined","t2","state","getWidget","data","useWidgetStore","useShallow","t3","state_0","color","formatter","state_1","t4","t5","t6","t7","Item","formulaDownloadConfig","refUI","downloadToPNG","modifier","downloadToCSV","formulaData","map","item","formulaConfig","series","FormulaUI","ref","useWidgetRef","jsxs","Fragment","jsx","Series","Prefix","Suffix","Row","Box","FormulaSkeleton","Symbol","for","styles","row","Skeleton","sanitizeDataItem","prefix","suffix","sanitizeDataItems","items"],"mappings":"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"}
1
+ {"version":3,"file":"formula.js","sources":["../../src/widgets/formula/components/value.tsx","../../src/widgets/formula/config.ts","../../src/widgets/formula/formula-ui.tsx","../../src/widgets/formula/skeleton.tsx","../../src/widgets/formula/serializer.ts"],"sourcesContent":["import { type FormulaWidgetState, type ValueProps } from '../types'\nimport { useWidgetStore } from '../../stores/widget-store'\nimport { Item } from './item'\nimport { useShallow } from 'zustand/shallow'\n\nconst defaultFormatter = (value: number) => value.toString()\n\nexport function Value({ id, index = 0, ...props }: ValueProps) {\n const value = useWidgetStore(\n useShallow(\n (state) => state.getWidget<FormulaWidgetState>(id)?.data?.[index]?.value,\n ),\n )\n const color = useWidgetStore(\n useShallow(\n (state) => state.getWidget<FormulaWidgetState>(id)?.data?.[index]?.color,\n ),\n )\n const formatter =\n useWidgetStore(\n useShallow((state) => state.getWidget<FormulaWidgetState>(id)?.formatter),\n ) ?? defaultFormatter\n\n return (\n <Item TypographyProps={{ color }} {...props}>\n {formatter(value ?? 0)}\n </Item>\n )\n}\n","import { downloadToCSV, downloadToPNG } from '../actions'\nimport type { ConfigProps } from '../loader/types'\nimport type { FormulaDownloadConfig, FormulaWidgetConfig } from './types'\n\nexport function formulaDownloadConfig({\n refUI,\n}: ConfigProps): FormulaDownloadConfig {\n return [\n {\n ...downloadToPNG,\n modifier: () => downloadToPNG.modifier(refUI),\n },\n {\n ...downloadToCSV,\n modifier: async (data) => {\n const formulaData = [data?.map((item) => item.value) ?? []]\n return downloadToCSV.modifier(formulaData)\n },\n },\n ]\n}\n\nexport function formulaConfig(): FormulaWidgetConfig {\n return {\n series: [],\n }\n}\n","import type { FormulaUIProps } from './types'\nimport { Row } from './components/row'\nimport { Value } from './components/value'\nimport { Prefix } from './components/prefix'\nimport { Suffix } from './components/suffix'\nimport { Series } from './components/series'\nimport { useWidgetRef } from '../../hooks'\nimport { Box } from '@mui/material'\n\nexport function FormulaUI(props: FormulaUIProps) {\n const { ref } = useWidgetRef(props.id)\n\n return (\n <Box ref={ref}>\n <Row id={props.id}>\n {({ index }) => (\n <>\n <Series id={props.id} index={index} />\n <Prefix id={props.id} index={index} />\n <Value id={props.id} index={index} />\n <Suffix id={props.id} index={index} />\n </>\n )}\n </Row>\n </Box>\n )\n}\n","import { Box, Skeleton } from '@mui/material'\nimport { styles } from './style'\n\nexport function FormulaSkeleton() {\n return (\n <Box sx={styles.row} aria-label='Formula skeleton'>\n <Skeleton width={120} height={32} />\n </Box>\n )\n}\n","import type { DataItem } from './types'\n\n/**\n * Sanitizes DataItem by converting ReactNode prefix/suffix values to undefined.\n * This ensures only string values are stored in the widget state.\n *\n * @param item - The DataItem to sanitize\n * @returns A new DataItem with ReactNode prefix/suffix values converted to undefined\n */\nexport function sanitizeDataItem(item: DataItem): DataItem {\n return {\n ...item,\n prefix: typeof item.prefix === 'string' ? item.prefix : undefined,\n suffix: typeof item.suffix === 'string' ? item.suffix : undefined,\n }\n}\n\n/**\n * Sanitizes an array of DataItems by converting ReactNode prefix/suffix values to undefined.\n *\n * @param items - Array of DataItems to sanitize\n * @returns A new array with sanitized DataItems\n */\nexport function sanitizeDataItems(\n items: DataItem[] | undefined,\n): DataItem[] | undefined {\n return items?.map(sanitizeDataItem)\n}\n"],"names":["defaultFormatter","value","toString","Value","t0","$","_c","id","props","t1","index","undefined","t2","state","getWidget","data","useWidgetStore","useShallow","t3","state_0","color","formatter","state_1","t4","t5","t6","t7","Item","formulaDownloadConfig","refUI","downloadToPNG","modifier","downloadToCSV","formulaData","map","item","formulaConfig","series","FormulaUI","ref","useWidgetRef","jsxs","Fragment","jsx","Series","Prefix","Suffix","Row","Box","FormulaSkeleton","Symbol","for","styles","row","Skeleton","sanitizeDataItem","prefix","suffix","sanitizeDataItems","items"],"mappings":"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"}
@@ -1,51 +1,51 @@
1
- import { jsx as r, jsxs as h } from "react/jsx-runtime";
2
- import { c as x } from "react/compiler-runtime";
1
+ import { jsx as r, jsxs as b } from "react/jsx-runtime";
2
+ import { c as w } from "react/compiler-runtime";
3
3
  import "react";
4
4
  import "echarts";
5
5
  import "../widget-store-CzDt8oSK.js";
6
6
  import "zustand/shallow";
7
- import { g as b } from "../options-D9wflre6.js";
8
- import { m as w } from "../utils-idmvq0Oa.js";
9
- import { f as _, c as S, a as k, n as L, b as C, d as v, e as I } from "../styles-DrPyd0y5.js";
10
- import { Box as p, Skeleton as f } from "@mui/material";
7
+ import { g as _ } from "../options-D9wflre6.js";
8
+ import { m as k } from "../utils-Cx3gYUcL.js";
9
+ import { f as S, c as L, a as C, n as m, b as v, d as I, e as N } from "../styles-CAroD5Rc.js";
10
+ import { Box as c, Skeleton as u } from "@mui/material";
11
11
  import "@mui/icons-material";
12
12
  import "react-markdown";
13
- import { d as c, a as m } from "../exports-Cr43OCul.js";
14
- import "../lasso-tool-jl4YK02H.js";
13
+ import { d as f, a as g } from "../exports-Cr43OCul.js";
14
+ import "../lasso-tool-BYbxrJ-7.js";
15
15
  import "../cjs-D4KH3azB.js";
16
16
  import "@dnd-kit/core";
17
17
  import "@dnd-kit/sortable";
18
18
  import "@dnd-kit/utilities";
19
- function ee({
19
+ function te({
20
20
  refUI: t
21
21
  }) {
22
22
  return [{
23
- ...c,
24
- modifier: () => c.modifier(t)
23
+ ...f,
24
+ modifier: () => f.modifier(t)
25
25
  }, {
26
- ...m,
26
+ ...g,
27
27
  modifier: async (e) => {
28
- const n = _(e);
29
- return m.modifier(n);
28
+ const o = S(e);
29
+ return g.modifier(o);
30
30
  }
31
31
  }];
32
32
  }
33
- function te(t) {
33
+ function ne(t) {
34
34
  return {
35
35
  type: "histogram",
36
- option: w(b(t), N(t))
36
+ option: k(_(t), T(t))
37
37
  };
38
38
  }
39
- function N({
39
+ function T({
40
40
  data: t = [],
41
41
  theme: e,
42
- formatter: n
42
+ formatter: o
43
43
  }) {
44
44
  const i = (t?.length ?? 0) > 1;
45
- let a = 1;
45
+ let a = 0, s = 1;
46
46
  return {
47
- legend: v(i),
48
- grid: C(i, e),
47
+ legend: I(i),
48
+ grid: v(i, e),
49
49
  xAxis: {
50
50
  type: "category",
51
51
  axisLine: {
@@ -73,8 +73,8 @@ function N({
73
73
  },
74
74
  yAxis: {
75
75
  type: "value",
76
- min: 0,
77
- max: (o) => (a = o.max <= 0 ? 1 : L(o.max), a),
76
+ min: (n) => (a = n.min < 0 ? m(n.min) : 0, a),
77
+ max: (n) => (s = n.max <= 0 ? 1 : m(n.max), s),
78
78
  splitNumber: 1,
79
79
  axisLabel: {
80
80
  fontSize: e.typography.overlineDelicate.fontSize,
@@ -84,7 +84,7 @@ function N({
84
84
  showMaxLabel: !0,
85
85
  showMinLabel: !0,
86
86
  verticalAlign: "bottom",
87
- formatter: (o) => o !== a ? "" : n ? n(o) : String(o)
87
+ formatter: (n) => n !== s && n !== a || n === 0 ? "" : o ? o(n) : String(n)
88
88
  },
89
89
  axisLine: {
90
90
  show: !1
@@ -100,19 +100,19 @@ function N({
100
100
  }
101
101
  },
102
102
  tooltip: {
103
- position: k(e),
104
- formatter: S((o) => {
105
- const s = o.value, g = o.dimensionNames?.[o.encode?.y?.at(0) ?? 1], l = s[g ?? ""], u = typeof l == "number" && n ? n(l) : l ?? "", d = typeof o.marker == "string" ? o.marker : "", y = o.seriesName ? `${o.seriesName}: ` : "";
103
+ position: C(e),
104
+ formatter: L((n) => {
105
+ const l = n.value, d = n.dimensionNames?.[n.encode?.y?.at(0) ?? 1], p = l[d ?? ""], y = typeof p == "number" && o ? o(p) : p ?? "", h = typeof n.marker == "string" ? n.marker : "", x = n.seriesName ? `${n.seriesName}: ` : "";
106
106
  return {
107
- name: o.name ?? "",
108
- seriesName: y,
109
- marker: d,
110
- value: u
107
+ name: n.name ?? "",
108
+ seriesName: x,
109
+ marker: h,
110
+ value: y
111
111
  };
112
112
  })
113
113
  },
114
- series: t.map((o, s) => ({
115
- datasetIndex: s,
114
+ series: t.map((n, l) => ({
115
+ datasetIndex: l,
116
116
  type: "bar",
117
117
  barGap: "1%",
118
118
  // No gap between bars in histogram
@@ -124,36 +124,36 @@ function N({
124
124
  }))
125
125
  };
126
126
  }
127
- const T = {
127
+ const A = {
128
128
  skeleton: {
129
- graph: I.graph
129
+ graph: N.graph
130
130
  }
131
131
  };
132
132
  function oe() {
133
- const t = x(2);
133
+ const t = w(2);
134
134
  let e;
135
- t[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (e = /* @__PURE__ */ r(p, { sx: {
135
+ t[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (e = /* @__PURE__ */ r(c, { sx: {
136
136
  display: "flex",
137
137
  alignItems: "flex-end",
138
138
  justifyContent: "space-between",
139
- gap: M,
139
+ gap: $,
140
140
  height: F,
141
141
  width: "100%"
142
142
  }, children: Array(8).fill(0).map(D) }), t[0] = e) : e = t[0];
143
- let n;
144
- return t[1] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (n = /* @__PURE__ */ h(p, { sx: T.skeleton.graph.container, children: [
143
+ let o;
144
+ return t[1] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (o = /* @__PURE__ */ b(c, { sx: A.skeleton.graph.container, children: [
145
145
  e,
146
- /* @__PURE__ */ r(p, { sx: {
146
+ /* @__PURE__ */ r(c, { sx: {
147
147
  display: "flex",
148
148
  alignItems: "center",
149
149
  justifyContent: "space-between",
150
150
  width: "100%",
151
151
  mt: j
152
- }, children: Array(4).fill(0).map(A) })
153
- ] }), t[1] = n) : n = t[1], n;
152
+ }, children: Array(4).fill(0).map(M) })
153
+ ] }), t[1] = o) : o = t[1], o;
154
154
  }
155
- function A(t, e) {
156
- return /* @__PURE__ */ r(f, { width: 32, height: 8 }, e);
155
+ function M(t, e) {
156
+ return /* @__PURE__ */ r(u, { width: 32, height: 8 }, `skeleton-label-${e}`);
157
157
  }
158
158
  function j(t) {
159
159
  const {
@@ -163,10 +163,10 @@ function j(t) {
163
163
  }
164
164
  function D(t, e) {
165
165
  const i = `${[60, 80, 95, 85, 70, 55, 40, 30][e]}%`;
166
- return /* @__PURE__ */ r(f, { variant: "rectangular", sx: {
166
+ return /* @__PURE__ */ r(u, { variant: "rectangular", sx: {
167
167
  flex: 1,
168
168
  height: i
169
- } }, e);
169
+ } }, `skeleton-bar-${e}`);
170
170
  }
171
171
  function F(t) {
172
172
  const {
@@ -174,7 +174,7 @@ function F(t) {
174
174
  } = t;
175
175
  return e(30);
176
176
  }
177
- function M(t) {
177
+ function $(t) {
178
178
  const {
179
179
  spacing: e
180
180
  } = t;
@@ -182,7 +182,7 @@ function M(t) {
182
182
  }
183
183
  export {
184
184
  oe as HistogramSkeleton,
185
- te as histogramConfig,
186
- ee as histogramDownloadConfig
185
+ ne as histogramConfig,
186
+ te as histogramDownloadConfig
187
187
  };
188
188
  //# sourceMappingURL=histogram.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"histogram.js","sources":["../../src/widgets/histogram/config.ts","../../src/widgets/histogram/style.ts","../../src/widgets/histogram/skeleton.tsx"],"sourcesContent":["import {\n getCommonOptions,\n mergeEchartWidgetConfig,\n type EchartOptionsProps,\n} from '../echart'\nimport type {\n HistogramConfig,\n HistogramWidgetConfig,\n HistogramWidgetData,\n} from './types'\nimport {\n flattenObjectArrayToCSV,\n buildLegendConfig,\n buildGridConfig,\n createTooltipPositioner,\n createTooltipFormatter,\n niceNum,\n} from '../_shared/chart-config'\nimport { downloadToCSV, downloadToPNG, type DownloadItem } from '../actions'\nimport type { ConfigProps } from '../loader/types'\n\nexport function histogramDownloadConfig({\n refUI,\n}: ConfigProps): DownloadItem<HistogramWidgetData>[] {\n return [\n {\n ...downloadToPNG,\n modifier: () => downloadToPNG.modifier(refUI),\n },\n {\n ...downloadToCSV,\n modifier: async (data) => {\n const rows = flattenObjectArrayToCSV(data)\n return downloadToCSV.modifier(rows)\n },\n },\n ]\n}\nexport function histogramConfig(props: HistogramConfig): HistogramWidgetConfig {\n return {\n type: 'histogram',\n option: mergeEchartWidgetConfig(getCommonOptions(props), getOption(props)),\n }\n}\nfunction getOption({\n data = [],\n theme,\n formatter,\n}: HistogramConfig): EchartOptionsProps {\n const hasLegend = (data?.length ?? 0) > 1\n\n let niceMax = 1\n\n return {\n legend: buildLegendConfig(hasLegend),\n grid: buildGridConfig(hasLegend, theme),\n xAxis: {\n type: 'category',\n axisLine: {\n show: false,\n },\n axisLabel: {\n fontSize: theme.typography.overlineDelicate.fontSize,\n fontFamily: theme.typography.overlineDelicate.fontFamily,\n showMinLabel: true,\n showMaxLabel: true,\n hideOverlap: true,\n margin: 0,\n padding: [\n parseInt(theme.spacing(0.5)),\n parseInt(theme.spacing(0.5)),\n 0,\n parseInt(theme.spacing(0.5)),\n ],\n color: theme.palette.black[60],\n },\n axisTick: {\n show: false,\n },\n splitLine: {\n show: true,\n lineStyle: {\n color: theme.palette.black[4],\n },\n },\n },\n yAxis: {\n type: 'value' as const,\n min: 0,\n max: (extent: { min: number; max: number }) => {\n niceMax = extent.max <= 0 ? 1 : niceNum(extent.max)\n return niceMax\n },\n splitNumber: 1,\n axisLabel: {\n fontSize: theme.typography.overlineDelicate.fontSize,\n fontFamily: theme.typography.overlineDelicate.fontFamily,\n margin: parseInt(theme.spacing(1)),\n show: true,\n showMaxLabel: true,\n showMinLabel: true,\n verticalAlign: 'bottom' as const,\n formatter: (value: number) => {\n if (value !== niceMax) return ''\n return formatter ? formatter(value) : String(value)\n },\n },\n axisLine: {\n show: false,\n },\n axisTick: {\n show: false,\n },\n splitLine: {\n show: true,\n lineStyle: {\n color: theme.palette.black[4],\n },\n },\n },\n tooltip: {\n position: createTooltipPositioner(theme),\n formatter: createTooltipFormatter((item) => {\n const value = item.value as Record<string, string | number>\n const index = item.dimensionNames?.[item.encode?.y?.at(0) ?? 1]\n const _value = value[index ?? '']\n\n const formattedValue =\n typeof _value === 'number' && formatter\n ? formatter(_value)\n : (_value ?? '')\n\n const marker = typeof item.marker === 'string' ? item.marker : ''\n const seriesName = item.seriesName ? `${item.seriesName}: ` : ''\n const name = item.name ?? ''\n\n return { name, seriesName, marker, value: formattedValue }\n }),\n },\n series: data.map((_: unknown, index: number) => ({\n datasetIndex: index,\n type: 'bar',\n barGap: '1%', // No gap between bars in histogram\n barCategoryGap: '1%', // No gap between categories in histogram\n emphasis: {\n focus: 'series',\n },\n })),\n } as EchartOptionsProps\n}\n","import type { SxProps, Theme } from '@mui/material'\nimport { baseSkeletonStyles } from '../_shared/skeleton'\n\nexport const styles = {\n skeleton: {\n graph: baseSkeletonStyles.graph,\n },\n} satisfies Record<string, SxProps<Theme>>\n","import { Box, Skeleton } from '@mui/material'\nimport { styles } from './style'\n\nexport function HistogramSkeleton() {\n return (\n <Box sx={styles.skeleton.graph.container}>\n <Box\n sx={{\n display: 'flex',\n alignItems: 'flex-end',\n justifyContent: 'space-between',\n gap: ({ spacing }) => spacing(0.5),\n height: ({ spacing }) => spacing(30),\n width: '100%',\n }}\n >\n {Array(8)\n .fill(0)\n .map((_, i) => {\n // Create varying heights for histogram bars\n const heights = [60, 80, 95, 85, 70, 55, 40, 30]\n const height = `${heights[i]}%`\n return (\n <Skeleton\n key={i}\n variant='rectangular'\n sx={{\n flex: 1,\n height,\n }}\n />\n )\n })}\n </Box>\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n width: '100%',\n mt: ({ spacing }) => spacing(1),\n }}\n >\n {Array(4)\n .fill(0)\n .map((_, i) => (\n <Skeleton key={i} width={32} height={8} />\n ))}\n </Box>\n </Box>\n )\n}\n"],"names":["histogramDownloadConfig","refUI","downloadToPNG","modifier","downloadToCSV","data","rows","flattenObjectArrayToCSV","histogramConfig","props","type","option","mergeEchartWidgetConfig","getCommonOptions","getOption","theme","formatter","hasLegend","length","niceMax","legend","buildLegendConfig","grid","buildGridConfig","xAxis","axisLine","show","axisLabel","fontSize","typography","overlineDelicate","fontFamily","showMinLabel","showMaxLabel","hideOverlap","margin","padding","parseInt","spacing","color","palette","black","axisTick","splitLine","lineStyle","yAxis","min","max","extent","niceNum","splitNumber","verticalAlign","value","String","tooltip","position","createTooltipPositioner","createTooltipFormatter","item","index","dimensionNames","encode","y","at","_value","formattedValue","marker","seriesName","name","series","map","_","datasetIndex","barGap","barCategoryGap","emphasis","focus","styles","skeleton","graph","baseSkeletonStyles","HistogramSkeleton","$","_c","t0","Symbol","for","jsx","Box","display","alignItems","justifyContent","gap","_temp","height","_temp2","width","Array","fill","_temp3","t1","container","mt","_temp4","_temp5","__0","i_0","Skeleton","spacing_1","i","flex","spacing_0"],"mappings":"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"}
1
+ {"version":3,"file":"histogram.js","sources":["../../src/widgets/histogram/config.ts","../../src/widgets/histogram/style.ts","../../src/widgets/histogram/skeleton.tsx"],"sourcesContent":["import {\n getCommonOptions,\n mergeEchartWidgetConfig,\n type EchartOptionsProps,\n} from '../echart'\nimport type {\n HistogramConfig,\n HistogramWidgetConfig,\n HistogramWidgetData,\n} from './types'\nimport {\n flattenObjectArrayToCSV,\n buildLegendConfig,\n buildGridConfig,\n createTooltipPositioner,\n createTooltipFormatter,\n niceNum,\n} from '../_shared/chart-config'\nimport { downloadToCSV, downloadToPNG, type DownloadItem } from '../actions'\nimport type { ConfigProps } from '../loader/types'\n\nexport function histogramDownloadConfig({\n refUI,\n}: ConfigProps): DownloadItem<HistogramWidgetData>[] {\n return [\n {\n ...downloadToPNG,\n modifier: () => downloadToPNG.modifier(refUI),\n },\n {\n ...downloadToCSV,\n modifier: async (data) => {\n const rows = flattenObjectArrayToCSV(data)\n return downloadToCSV.modifier(rows)\n },\n },\n ]\n}\nexport function histogramConfig(props: HistogramConfig): HistogramWidgetConfig {\n return {\n type: 'histogram',\n option: mergeEchartWidgetConfig(getCommonOptions(props), getOption(props)),\n }\n}\nfunction getOption({\n data = [],\n theme,\n formatter,\n}: HistogramConfig): EchartOptionsProps {\n const hasLegend = (data?.length ?? 0) > 1\n\n let niceMin = 0\n let niceMax = 1\n\n return {\n legend: buildLegendConfig(hasLegend),\n grid: buildGridConfig(hasLegend, theme),\n xAxis: {\n type: 'category',\n axisLine: {\n show: false,\n },\n axisLabel: {\n fontSize: theme.typography.overlineDelicate.fontSize,\n fontFamily: theme.typography.overlineDelicate.fontFamily,\n showMinLabel: true,\n showMaxLabel: true,\n hideOverlap: true,\n margin: 0,\n padding: [\n parseInt(theme.spacing(0.5)),\n parseInt(theme.spacing(0.5)),\n 0,\n parseInt(theme.spacing(0.5)),\n ],\n color: theme.palette.black[60],\n },\n axisTick: {\n show: false,\n },\n splitLine: {\n show: true,\n lineStyle: {\n color: theme.palette.black[4],\n },\n },\n },\n yAxis: {\n type: 'value' as const,\n min: (extent: { min: number }) => {\n niceMin = extent.min < 0 ? niceNum(extent.min) : 0\n return niceMin\n },\n max: (extent: { min: number; max: number }) => {\n niceMax = extent.max <= 0 ? 1 : niceNum(extent.max)\n return niceMax\n },\n splitNumber: 1,\n axisLabel: {\n fontSize: theme.typography.overlineDelicate.fontSize,\n fontFamily: theme.typography.overlineDelicate.fontFamily,\n margin: parseInt(theme.spacing(1)),\n show: true,\n showMaxLabel: true,\n showMinLabel: true,\n verticalAlign: 'bottom' as const,\n formatter: (value: number) => {\n if (value !== niceMax && value !== niceMin) return ''\n if (value === 0) return ''\n return formatter ? formatter(value) : String(value)\n },\n },\n axisLine: {\n show: false,\n },\n axisTick: {\n show: false,\n },\n splitLine: {\n show: true,\n lineStyle: {\n color: theme.palette.black[4],\n },\n },\n },\n tooltip: {\n position: createTooltipPositioner(theme),\n formatter: createTooltipFormatter((item) => {\n const value = item.value as Record<string, string | number>\n const index = item.dimensionNames?.[item.encode?.y?.at(0) ?? 1]\n const _value = value[index ?? '']\n\n const formattedValue =\n typeof _value === 'number' && formatter\n ? formatter(_value)\n : (_value ?? '')\n\n const marker = typeof item.marker === 'string' ? item.marker : ''\n const seriesName = item.seriesName ? `${item.seriesName}: ` : ''\n const name = item.name ?? ''\n\n return { name, seriesName, marker, value: formattedValue }\n }),\n },\n series: data.map((_: unknown, index: number) => ({\n datasetIndex: index,\n type: 'bar',\n barGap: '1%', // No gap between bars in histogram\n barCategoryGap: '1%', // No gap between categories in histogram\n emphasis: {\n focus: 'series',\n },\n })),\n } as EchartOptionsProps\n}\n","import type { SxProps, Theme } from '@mui/material'\nimport { baseSkeletonStyles } from '../_shared/skeleton'\n\nexport const styles = {\n skeleton: {\n graph: baseSkeletonStyles.graph,\n },\n} satisfies Record<string, SxProps<Theme>>\n","import { Box, Skeleton } from '@mui/material'\nimport { styles } from './style'\n\nexport function HistogramSkeleton() {\n return (\n <Box sx={styles.skeleton.graph.container}>\n <Box\n sx={{\n display: 'flex',\n alignItems: 'flex-end',\n justifyContent: 'space-between',\n gap: ({ spacing }) => spacing(0.5),\n height: ({ spacing }) => spacing(30),\n width: '100%',\n }}\n >\n {Array(8)\n .fill(0)\n .map((_, i) => {\n // Create varying heights for histogram bars\n const heights = [60, 80, 95, 85, 70, 55, 40, 30]\n const height = `${heights[i]}%`\n return (\n <Skeleton\n key={`skeleton-bar-${i}`}\n variant='rectangular'\n sx={{\n flex: 1,\n height,\n }}\n />\n )\n })}\n </Box>\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n width: '100%',\n mt: ({ spacing }) => spacing(1),\n }}\n >\n {Array(4)\n .fill(0)\n .map((_, i) => (\n <Skeleton key={`skeleton-label-${i}`} width={32} height={8} />\n ))}\n </Box>\n </Box>\n )\n}\n"],"names":["histogramDownloadConfig","refUI","downloadToPNG","modifier","downloadToCSV","data","rows","flattenObjectArrayToCSV","histogramConfig","props","type","option","mergeEchartWidgetConfig","getCommonOptions","getOption","theme","formatter","hasLegend","length","niceMin","niceMax","legend","buildLegendConfig","grid","buildGridConfig","xAxis","axisLine","show","axisLabel","fontSize","typography","overlineDelicate","fontFamily","showMinLabel","showMaxLabel","hideOverlap","margin","padding","parseInt","spacing","color","palette","black","axisTick","splitLine","lineStyle","yAxis","min","extent","niceNum","max","splitNumber","verticalAlign","value","String","tooltip","position","createTooltipPositioner","createTooltipFormatter","item","index","dimensionNames","encode","y","at","_value","formattedValue","marker","seriesName","name","series","map","_","datasetIndex","barGap","barCategoryGap","emphasis","focus","styles","skeleton","graph","baseSkeletonStyles","HistogramSkeleton","$","_c","t0","Symbol","for","jsx","Box","display","alignItems","justifyContent","gap","_temp","height","_temp2","width","Array","fill","_temp3","t1","container","mt","_temp4","_temp5","__0","i_0","Skeleton","i","spacing_1","flex","spacing_0"],"mappings":"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"}
@@ -7,7 +7,7 @@ import S from "react-markdown";
7
7
  import "@mui/icons-material";
8
8
  import "react";
9
9
  import "html2canvas";
10
- import "../lasso-tool-jl4YK02H.js";
10
+ import "../lasso-tool-BYbxrJ-7.js";
11
11
  import "../cjs-D4KH3azB.js";
12
12
  import "@dnd-kit/core";
13
13
  import "@dnd-kit/sortable";