@carto/ps-react-ui 4.6.2 → 4.6.3
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.
- package/dist/options-CthfUJDz.js +46 -0
- package/dist/options-CthfUJDz.js.map +1 -0
- package/dist/styles-BYTyKQFP.js +142 -0
- package/dist/{styles-Y8q7Jff3.js.map → styles-BYTyKQFP.js.map} +1 -1
- package/dist/types/widgets/utils/chart-config/index.d.ts +1 -1
- package/dist/types/widgets/utils/chart-config/option-builders.d.ts +27 -0
- package/dist/widgets/bar.js +34 -30
- package/dist/widgets/bar.js.map +1 -1
- package/dist/widgets/echart.js +1 -1
- package/dist/widgets/histogram.js +64 -61
- package/dist/widgets/histogram.js.map +1 -1
- package/dist/widgets/pie.js +37 -36
- package/dist/widgets/pie.js.map +1 -1
- package/dist/widgets/scatterplot.js +30 -29
- package/dist/widgets/scatterplot.js.map +1 -1
- package/dist/widgets/timeseries.js +34 -33
- package/dist/widgets/timeseries.js.map +1 -1
- package/dist/widgets/utils.js +1 -1
- package/package.json +1 -1
- package/src/widgets/bar/config.ts +5 -0
- package/src/widgets/echart/options.ts +1 -4
- package/src/widgets/histogram/config.ts +9 -4
- package/src/widgets/pie/config.ts +2 -0
- package/src/widgets/scatterplot/config.ts +2 -0
- package/src/widgets/timeseries/config.ts +2 -0
- package/src/widgets/utils/chart-config/index.ts +2 -0
- package/src/widgets/utils/chart-config/option-builders.test.ts +105 -1
- package/src/widgets/utils/chart-config/option-builders.ts +56 -0
- package/dist/options-D9wflre6.js +0 -49
- package/dist/options-D9wflre6.js.map +0 -1
- package/dist/styles-Y8q7Jff3.js +0 -118
|
@@ -1,28 +1,28 @@
|
|
|
1
|
-
import { jsx as
|
|
2
|
-
import { c as
|
|
1
|
+
import { jsx as g, jsxs as L } from "react/jsx-runtime";
|
|
2
|
+
import { c as _ } from "react/compiler-runtime";
|
|
3
3
|
import "react";
|
|
4
4
|
import "echarts";
|
|
5
5
|
import "../widget-store-Bw5zRUGg.js";
|
|
6
6
|
import "zustand/shallow";
|
|
7
|
-
import { g as k } from "../options-
|
|
7
|
+
import { g as k } from "../options-CthfUJDz.js";
|
|
8
8
|
import { m as C } from "../utils-BOhInag6.js";
|
|
9
|
-
import { g as $, h as A, n as u, d as M, e as
|
|
10
|
-
import { Box as f, Skeleton as
|
|
9
|
+
import { j as v, g as $, h as A, n as u, d as M, e as T, c as D } from "../styles-BYTyKQFP.js";
|
|
10
|
+
import { Box as f, Skeleton as y } from "@mui/material";
|
|
11
11
|
import "@mui/icons-material";
|
|
12
|
-
import { d as h, a as
|
|
12
|
+
import { d as h, a as d } from "../exports-Cr43OCul.js";
|
|
13
13
|
import "../lasso-tool-BYbxrJ-7.js";
|
|
14
14
|
import "../cjs-D4KH3azB.js";
|
|
15
15
|
import "@dnd-kit/core";
|
|
16
16
|
import "@dnd-kit/sortable";
|
|
17
17
|
import "@dnd-kit/utilities";
|
|
18
|
-
function
|
|
18
|
+
function I(e, n, t) {
|
|
19
19
|
if (!e?.length || e[0]?.length === 0) return [];
|
|
20
|
-
const
|
|
21
|
-
return [
|
|
22
|
-
length:
|
|
23
|
-
}, (c, s) => `Series ${s + 1}`)] : ["Bin", "Value"], ...
|
|
20
|
+
const o = e[0]?.length ?? 0, r = b(o, n, t), a = e.length;
|
|
21
|
+
return [a > 1 ? ["Bin", ...Array.from({
|
|
22
|
+
length: a
|
|
23
|
+
}, (c, s) => `Series ${s + 1}`)] : ["Bin", "Value"], ...r.map((c, s) => [c, ...e.map((i) => String(i[s] ?? 0))])];
|
|
24
24
|
}
|
|
25
|
-
function
|
|
25
|
+
function oe({
|
|
26
26
|
refUI: e,
|
|
27
27
|
ticks: n,
|
|
28
28
|
labelFormatter: t
|
|
@@ -31,40 +31,42 @@ function ie({
|
|
|
31
31
|
...h,
|
|
32
32
|
modifier: () => h.modifier(e)
|
|
33
33
|
}, {
|
|
34
|
-
...
|
|
35
|
-
modifier: async (
|
|
34
|
+
...d,
|
|
35
|
+
modifier: async (o) => d.modifier(I(o, n, t))
|
|
36
36
|
}];
|
|
37
37
|
}
|
|
38
|
-
function
|
|
39
|
-
const
|
|
38
|
+
function b(e, n, t) {
|
|
39
|
+
const o = (r) => String(t ? t(r) : r);
|
|
40
40
|
return Array.from({
|
|
41
41
|
length: e
|
|
42
|
-
}, (
|
|
43
|
-
const p = n[
|
|
44
|
-
return l !== void 0 && isFinite(l) ? `${
|
|
42
|
+
}, (r, a) => {
|
|
43
|
+
const p = n[a] ?? a, l = n[a + 1];
|
|
44
|
+
return l !== void 0 && isFinite(l) ? `${o(p)}-${o(l)}` : `${o(p)}+`;
|
|
45
45
|
});
|
|
46
46
|
}
|
|
47
47
|
function re(e) {
|
|
48
48
|
return {
|
|
49
49
|
type: "histogram",
|
|
50
|
-
option: C(k(e),
|
|
51
|
-
formatter: e.formatter
|
|
50
|
+
option: C(k(e), N(e)),
|
|
51
|
+
formatter: e.formatter,
|
|
52
|
+
labelFormatter: e.labelFormatter
|
|
52
53
|
};
|
|
53
54
|
}
|
|
54
|
-
function
|
|
55
|
+
function N({
|
|
55
56
|
data: e = [],
|
|
56
57
|
ticks: n,
|
|
57
58
|
theme: t,
|
|
58
|
-
formatter:
|
|
59
|
-
labelFormatter:
|
|
59
|
+
formatter: o,
|
|
60
|
+
labelFormatter: r
|
|
60
61
|
}) {
|
|
61
|
-
const
|
|
62
|
+
const a = (e?.length ?? 0) > 1, p = e[0]?.length ?? 0, l = b(p, n, r);
|
|
62
63
|
let c = 0, s = 1;
|
|
63
64
|
return {
|
|
64
|
-
legend:
|
|
65
|
-
hasLegend:
|
|
65
|
+
legend: T({
|
|
66
|
+
hasLegend: a,
|
|
67
|
+
labelFormatter: r
|
|
66
68
|
}),
|
|
67
|
-
grid: M(
|
|
69
|
+
grid: M(a, t),
|
|
68
70
|
xAxis: {
|
|
69
71
|
type: "category",
|
|
70
72
|
data: l,
|
|
@@ -74,8 +76,8 @@ function I({
|
|
|
74
76
|
axisLabel: {
|
|
75
77
|
fontSize: t.typography.overlineDelicate.fontSize,
|
|
76
78
|
fontFamily: t.typography.overlineDelicate.fontFamily,
|
|
77
|
-
showMinLabel:
|
|
78
|
-
showMaxLabel:
|
|
79
|
+
showMinLabel: void 0,
|
|
80
|
+
showMaxLabel: void 0,
|
|
79
81
|
hideOverlap: !0,
|
|
80
82
|
margin: 0,
|
|
81
83
|
padding: [parseInt(t.spacing(0.5)), parseInt(t.spacing(0.5)), 0, parseInt(t.spacing(0.5))],
|
|
@@ -104,7 +106,7 @@ function I({
|
|
|
104
106
|
showMaxLabel: !0,
|
|
105
107
|
showMinLabel: !0,
|
|
106
108
|
verticalAlign: "bottom",
|
|
107
|
-
formatter: (i) => i !== s && i !== c || i === 0 ? "" :
|
|
109
|
+
formatter: (i) => i !== s && i !== c || i === 0 ? "" : o ? o(i) : String(i)
|
|
108
110
|
},
|
|
109
111
|
axisLine: {
|
|
110
112
|
show: !1
|
|
@@ -122,12 +124,12 @@ function I({
|
|
|
122
124
|
tooltip: {
|
|
123
125
|
position: A(t),
|
|
124
126
|
formatter: $((i) => {
|
|
125
|
-
const
|
|
127
|
+
const m = i.value, x = typeof m == "number" && o ? o(m) : String(m ?? ""), S = typeof i.marker == "string" ? i.marker : "", w = i.seriesName ? `${i.seriesName}: ` : "";
|
|
126
128
|
return {
|
|
127
|
-
name: i.name ?? "",
|
|
128
|
-
seriesName:
|
|
129
|
-
marker:
|
|
130
|
-
value:
|
|
129
|
+
name: r ? String(r(i.name ?? "")) : i.name ?? "",
|
|
130
|
+
seriesName: w,
|
|
131
|
+
marker: S,
|
|
132
|
+
value: x
|
|
131
133
|
};
|
|
132
134
|
})
|
|
133
135
|
},
|
|
@@ -138,70 +140,71 @@ function I({
|
|
|
138
140
|
barCategoryGap: "1%",
|
|
139
141
|
emphasis: {
|
|
140
142
|
focus: "series"
|
|
141
|
-
}
|
|
143
|
+
},
|
|
144
|
+
...v(o)
|
|
142
145
|
}))
|
|
143
146
|
};
|
|
144
147
|
}
|
|
145
|
-
const
|
|
148
|
+
const j = {
|
|
146
149
|
skeleton: {
|
|
147
|
-
graph:
|
|
150
|
+
graph: D.graph
|
|
148
151
|
}
|
|
149
152
|
};
|
|
150
|
-
function
|
|
151
|
-
const e =
|
|
153
|
+
function ae() {
|
|
154
|
+
const e = _(2);
|
|
152
155
|
let n;
|
|
153
|
-
e[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (n = /* @__PURE__ */
|
|
156
|
+
e[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (n = /* @__PURE__ */ g(f, { sx: {
|
|
154
157
|
display: "flex",
|
|
155
158
|
alignItems: "flex-end",
|
|
156
159
|
justifyContent: "space-between",
|
|
157
|
-
gap:
|
|
158
|
-
height:
|
|
160
|
+
gap: B,
|
|
161
|
+
height: V,
|
|
159
162
|
width: "100%"
|
|
160
|
-
}, children: Array(8).fill(0).map(
|
|
163
|
+
}, children: Array(8).fill(0).map(G) }), e[0] = n) : n = e[0];
|
|
161
164
|
let t;
|
|
162
|
-
return e[1] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t = /* @__PURE__ */
|
|
165
|
+
return e[1] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t = /* @__PURE__ */ L(f, { sx: j.skeleton.graph.container, children: [
|
|
163
166
|
n,
|
|
164
|
-
/* @__PURE__ */
|
|
167
|
+
/* @__PURE__ */ g(f, { sx: {
|
|
165
168
|
display: "flex",
|
|
166
169
|
alignItems: "center",
|
|
167
170
|
justifyContent: "space-between",
|
|
168
171
|
width: "100%",
|
|
169
|
-
mt:
|
|
170
|
-
}, children: Array(4).fill(0).map(
|
|
172
|
+
mt: F
|
|
173
|
+
}, children: Array(4).fill(0).map(z) })
|
|
171
174
|
] }), e[1] = t) : t = e[1], t;
|
|
172
175
|
}
|
|
173
|
-
function
|
|
174
|
-
return /* @__PURE__ */
|
|
176
|
+
function z(e, n) {
|
|
177
|
+
return /* @__PURE__ */ g(y, { width: 32, height: 8 }, `skeleton-label-${n}`);
|
|
175
178
|
}
|
|
176
|
-
function
|
|
179
|
+
function F(e) {
|
|
177
180
|
const {
|
|
178
181
|
spacing: n
|
|
179
182
|
} = e;
|
|
180
183
|
return n(1);
|
|
181
184
|
}
|
|
182
|
-
function
|
|
183
|
-
const
|
|
184
|
-
return /* @__PURE__ */
|
|
185
|
+
function G(e, n) {
|
|
186
|
+
const o = `${[60, 80, 95, 85, 70, 55, 40, 30][n]}%`;
|
|
187
|
+
return /* @__PURE__ */ g(y, { variant: "rectangular", sx: {
|
|
185
188
|
flex: 1,
|
|
186
|
-
height:
|
|
189
|
+
height: o
|
|
187
190
|
} }, `skeleton-bar-${n}`);
|
|
188
191
|
}
|
|
189
|
-
function
|
|
192
|
+
function V(e) {
|
|
190
193
|
const {
|
|
191
194
|
spacing: n
|
|
192
195
|
} = e;
|
|
193
196
|
return n(30);
|
|
194
197
|
}
|
|
195
|
-
function
|
|
198
|
+
function B(e) {
|
|
196
199
|
const {
|
|
197
200
|
spacing: n
|
|
198
201
|
} = e;
|
|
199
202
|
return n(0.5);
|
|
200
203
|
}
|
|
201
204
|
export {
|
|
202
|
-
|
|
205
|
+
ae as HistogramSkeleton,
|
|
203
206
|
re as histogramConfig,
|
|
204
|
-
|
|
205
|
-
|
|
207
|
+
I as histogramDataToCSV,
|
|
208
|
+
oe as histogramDownloadConfig
|
|
206
209
|
};
|
|
207
210
|
//# 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 { HistogramConfig, HistogramWidgetConfig } from './types'\nimport {\n buildLegendConfig,\n buildGridConfig,\n createTooltipPositioner,\n createTooltipFormatter,\n niceNum,\n} from '../utils/chart-config'\nimport { downloadToCSV, downloadToPNG, type DownloadItem } from '../actions'\nimport type { ConfigProps } from '../loader/types'\n\nexport interface HistogramDownloadConfigProps extends ConfigProps {\n ticks: number[]\n labelFormatter?: (value: string | number) => string | number\n}\n\nexport function histogramDataToCSV(\n data: number[][],\n ticks: number[],\n labelFormatter?: (value: string | number) => string | number,\n): string[][] {\n if (!data?.length || data[0]?.length === 0) return []\n\n const dataLength = data[0]?.length ?? 0\n const labels = createAxisLabels(dataLength, ticks, labelFormatter)\n const seriesCount = data.length\n const isMulti = seriesCount > 1\n\n const headers = isMulti\n ? [\n 'Bin',\n ...Array.from({ length: seriesCount }, (_, i) => `Series ${i + 1}`),\n ]\n : ['Bin', 'Value']\n\n return [\n headers,\n ...labels.map((label, i) => [\n label,\n ...data.map((series) => String(series[i] ?? 0)),\n ]),\n ]\n}\n\nexport function histogramDownloadConfig({\n refUI,\n ticks,\n labelFormatter,\n}: HistogramDownloadConfigProps): DownloadItem<number[][]>[] {\n return [\n {\n ...downloadToPNG,\n modifier: () => downloadToPNG.modifier(refUI),\n },\n {\n ...downloadToCSV,\n modifier: async (data) =>\n downloadToCSV.modifier(histogramDataToCSV(data, ticks, labelFormatter)),\n },\n ]\n}\n\n/**\n * Creates formatted axis labels from tick boundaries.\n *\n * @param dataLength - Number of data points (determines number of labels).\n * @param ticks - Bin boundaries. If `ticks.length === dataLength + 1`, all\n * bins are ranges. If `ticks.length === dataLength`, the last bin is\n * open-ended (`+`). A last tick of `Infinity` also produces `+`.\n * @param labelFormatter - Optional formatter applied to each individual tick\n * value when building the bin range label.\n */\nfunction createAxisLabels(\n dataLength: number,\n ticks: number[],\n labelFormatter?: (value: string | number) => string | number,\n): string[] {\n const fmt = (v: number) =>\n labelFormatter ? String(labelFormatter(v)) : String(v)\n\n return Array.from({ length: dataLength }, (_, i) => {\n const low = ticks[i] ?? i\n const high = ticks[i + 1]\n return high !== undefined && isFinite(high)\n ? `${fmt(low)}-${fmt(high)}`\n : `${fmt(low)}+`\n })\n}\n\n/**\n * Generates ECharts configuration for distribution histogram widgets with\n * adjacent bars (minimal gap) and axis formatting styled with the CARTO theme.\n *\n * Accepts raw `number[][]` data and `ticks` boundaries. The ticks and\n * `labelFormatter` are used to create the x-axis category labels; the raw\n * numeric data is embedded directly in each series.\n *\n * @param props - Histogram configuration including raw data, ticks, and theme.\n * @returns Widget config with ECharts option object.\n */\nexport function histogramConfig(props: HistogramConfig): HistogramWidgetConfig {\n return {\n type: 'histogram',\n option: mergeEchartWidgetConfig(getCommonOptions(props), getOption(props)),\n formatter: props.formatter,\n }\n}\n\nfunction getOption({\n data = [],\n ticks,\n theme,\n formatter,\n labelFormatter,\n}: HistogramConfig): EchartOptionsProps {\n const hasLegend = (data?.length ?? 0) > 1\n const dataLength = data[0]?.length ?? 0\n const axisLabels = createAxisLabels(dataLength, ticks, labelFormatter)\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 data: axisLabels,\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 number\n\n const formattedValue =\n typeof _value === 'number' && formatter\n ? formatter(_value)\n : String(_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((seriesData: number[]) => ({\n type: 'bar',\n data: seriesData,\n barGap: '1%',\n barCategoryGap: '1%',\n emphasis: {\n focus: 'series',\n },\n })),\n } as EchartOptionsProps\n}\n","import type { SxProps, Theme } from '@mui/material'\nimport { baseSkeletonStyles } from '../utils/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":["histogramDataToCSV","data","ticks","labelFormatter","length","dataLength","labels","createAxisLabels","seriesCount","Array","from","_","i","map","label","series","String","histogramDownloadConfig","refUI","downloadToPNG","modifier","downloadToCSV","fmt","v","low","high","undefined","isFinite","histogramConfig","props","type","option","mergeEchartWidgetConfig","getCommonOptions","getOption","formatter","theme","hasLegend","axisLabels","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","tooltip","position","createTooltipPositioner","createTooltipFormatter","item","_value","formattedValue","marker","seriesName","name","seriesData","barGap","barCategoryGap","emphasis","focus","styles","skeleton","graph","baseSkeletonStyles","HistogramSkeleton","$","_c","t0","Symbol","for","jsx","Box","display","alignItems","justifyContent","gap","_temp","height","_temp2","width","fill","_temp3","t1","container","mt","_temp4","_temp5","__0","i_0","Skeleton","spacing_1","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 { HistogramConfig, HistogramWidgetConfig } from './types'\nimport {\n buildLegendConfig,\n buildGridConfig,\n createTooltipPositioner,\n createTooltipFormatter,\n niceNum,\n buildHistogramSeriesLabelConfig,\n} from '../utils/chart-config'\nimport { downloadToCSV, downloadToPNG, type DownloadItem } from '../actions'\nimport type { ConfigProps } from '../loader/types'\n\nexport interface HistogramDownloadConfigProps extends ConfigProps {\n ticks: number[]\n labelFormatter?: (value: string | number) => string | number\n}\n\nexport function histogramDataToCSV(\n data: number[][],\n ticks: number[],\n labelFormatter?: (value: string | number) => string | number,\n): string[][] {\n if (!data?.length || data[0]?.length === 0) return []\n\n const dataLength = data[0]?.length ?? 0\n const labels = createAxisLabels(dataLength, ticks, labelFormatter)\n const seriesCount = data.length\n const isMulti = seriesCount > 1\n\n const headers = isMulti\n ? [\n 'Bin',\n ...Array.from({ length: seriesCount }, (_, i) => `Series ${i + 1}`),\n ]\n : ['Bin', 'Value']\n\n return [\n headers,\n ...labels.map((label, i) => [\n label,\n ...data.map((series) => String(series[i] ?? 0)),\n ]),\n ]\n}\n\nexport function histogramDownloadConfig({\n refUI,\n ticks,\n labelFormatter,\n}: HistogramDownloadConfigProps): DownloadItem<number[][]>[] {\n return [\n {\n ...downloadToPNG,\n modifier: () => downloadToPNG.modifier(refUI),\n },\n {\n ...downloadToCSV,\n modifier: async (data) =>\n downloadToCSV.modifier(histogramDataToCSV(data, ticks, labelFormatter)),\n },\n ]\n}\n\n/**\n * Creates formatted axis labels from tick boundaries.\n *\n * @param dataLength - Number of data points (determines number of labels).\n * @param ticks - Bin boundaries. If `ticks.length === dataLength + 1`, all\n * bins are ranges. If `ticks.length === dataLength`, the last bin is\n * open-ended (`+`). A last tick of `Infinity` also produces `+`.\n * @param labelFormatter - Optional formatter applied to each individual tick\n * value when building the bin range label.\n */\nfunction createAxisLabels(\n dataLength: number,\n ticks: number[],\n labelFormatter?: (value: string | number) => string | number,\n): string[] {\n const fmt = (v: number) =>\n labelFormatter ? String(labelFormatter(v)) : String(v)\n\n return Array.from({ length: dataLength }, (_, i) => {\n const low = ticks[i] ?? i\n const high = ticks[i + 1]\n return high !== undefined && isFinite(high)\n ? `${fmt(low)}-${fmt(high)}`\n : `${fmt(low)}+`\n })\n}\n\n/**\n * Generates ECharts configuration for distribution histogram widgets with\n * adjacent bars (minimal gap) and axis formatting styled with the CARTO theme.\n *\n * Accepts raw `number[][]` data and `ticks` boundaries. The ticks and\n * `labelFormatter` are used to create the x-axis category labels; the raw\n * numeric data is embedded directly in each series.\n *\n * @param props - Histogram configuration including raw data, ticks, and theme.\n * @returns Widget config with ECharts option object.\n */\nexport function histogramConfig(props: HistogramConfig): HistogramWidgetConfig {\n return {\n type: 'histogram',\n option: mergeEchartWidgetConfig(getCommonOptions(props), getOption(props)),\n formatter: props.formatter,\n labelFormatter: props.labelFormatter,\n }\n}\n\nfunction getOption({\n data = [],\n ticks,\n theme,\n formatter,\n labelFormatter,\n}: HistogramConfig): EchartOptionsProps {\n const hasLegend = (data?.length ?? 0) > 1\n const dataLength = data[0]?.length ?? 0\n const axisLabels = createAxisLabels(dataLength, ticks, labelFormatter)\n\n let niceMin = 0\n let niceMax = 1\n\n return {\n legend: buildLegendConfig({ hasLegend, labelFormatter }),\n grid: buildGridConfig(hasLegend, theme),\n xAxis: {\n type: 'category',\n data: axisLabels,\n axisLine: {\n show: false,\n },\n axisLabel: {\n fontSize: theme.typography.overlineDelicate.fontSize,\n fontFamily: theme.typography.overlineDelicate.fontFamily,\n showMinLabel: undefined,\n showMaxLabel: undefined,\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 number\n\n const formattedValue =\n typeof _value === 'number' && formatter\n ? formatter(_value)\n : String(_value ?? '')\n\n const marker = typeof item.marker === 'string' ? item.marker : ''\n const seriesName = item.seriesName ? `${item.seriesName}: ` : ''\n const name = labelFormatter\n ? String(labelFormatter(item.name ?? ''))\n : (item.name ?? '')\n\n return { name, seriesName, marker, value: formattedValue }\n }),\n },\n series: data.map((seriesData: number[]) => ({\n type: 'bar',\n data: seriesData,\n barGap: '1%',\n barCategoryGap: '1%',\n emphasis: {\n focus: 'series',\n },\n ...buildHistogramSeriesLabelConfig(formatter),\n })),\n } as EchartOptionsProps\n}\n","import type { SxProps, Theme } from '@mui/material'\nimport { baseSkeletonStyles } from '../utils/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":["histogramDataToCSV","data","ticks","labelFormatter","length","dataLength","labels","createAxisLabels","seriesCount","Array","from","_","i","map","label","series","String","histogramDownloadConfig","refUI","downloadToPNG","modifier","downloadToCSV","fmt","v","low","high","undefined","isFinite","histogramConfig","props","type","option","mergeEchartWidgetConfig","getCommonOptions","getOption","formatter","theme","hasLegend","axisLabels","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","tooltip","position","createTooltipPositioner","createTooltipFormatter","item","_value","formattedValue","marker","seriesName","name","seriesData","barGap","barCategoryGap","emphasis","focus","buildHistogramSeriesLabelConfig","styles","skeleton","graph","baseSkeletonStyles","HistogramSkeleton","$","_c","t0","Symbol","for","jsx","Box","display","alignItems","justifyContent","gap","_temp","height","_temp2","width","fill","_temp3","t1","container","mt","_temp4","_temp5","__0","i_0","Skeleton","spacing_1","flex","spacing_0"],"mappings":"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"}
|
package/dist/widgets/pie.js
CHANGED
|
@@ -4,21 +4,21 @@ import "react";
|
|
|
4
4
|
import "echarts";
|
|
5
5
|
import "../widget-store-Bw5zRUGg.js";
|
|
6
6
|
import "zustand/shallow";
|
|
7
|
-
import { g as L } from "../options-
|
|
7
|
+
import { g as L } from "../options-CthfUJDz.js";
|
|
8
8
|
import { m as N } from "../utils-BOhInag6.js";
|
|
9
9
|
import { c as j, f as A } from "../download-config-C3I0jWIL.js";
|
|
10
|
-
import { g as b, h as
|
|
11
|
-
import { Box as h, Skeleton as
|
|
12
|
-
const
|
|
13
|
-
function
|
|
10
|
+
import { i as O, g as b, h as T, n as v, d as S, e as _, c as z } from "../styles-BYTyKQFP.js";
|
|
11
|
+
import { Box as h, Skeleton as g } from "@mui/material";
|
|
12
|
+
const F = j(A);
|
|
13
|
+
function ee(e) {
|
|
14
14
|
return {
|
|
15
15
|
type: "pie",
|
|
16
|
-
option: N(L(e),
|
|
16
|
+
option: N(L(e), $(e)),
|
|
17
17
|
formatter: e.formatter,
|
|
18
18
|
labelFormatter: e.labelFormatter
|
|
19
19
|
};
|
|
20
20
|
}
|
|
21
|
-
function
|
|
21
|
+
function $({
|
|
22
22
|
data: e = [],
|
|
23
23
|
theme: n,
|
|
24
24
|
formatter: r,
|
|
@@ -79,7 +79,7 @@ function z({
|
|
|
79
79
|
}
|
|
80
80
|
},
|
|
81
81
|
tooltip: {
|
|
82
|
-
position:
|
|
82
|
+
position: T(n),
|
|
83
83
|
formatter: b((t) => {
|
|
84
84
|
const s = t.value, u = t.dimensionNames?.[t.encode?.x?.at(0) ?? 1], a = s[u ?? ""], d = typeof a == "number" && r ? r(a) : a ?? "", m = typeof t.marker == "string" ? t.marker : "", I = t.seriesName ? `${t.seriesName}: ` : "";
|
|
85
85
|
return {
|
|
@@ -96,7 +96,8 @@ function z({
|
|
|
96
96
|
barMaxWidth: 100,
|
|
97
97
|
emphasis: {
|
|
98
98
|
focus: "series"
|
|
99
|
-
}
|
|
99
|
+
},
|
|
100
|
+
...O(r, "x")
|
|
100
101
|
}))
|
|
101
102
|
};
|
|
102
103
|
}
|
|
@@ -176,12 +177,12 @@ function z({
|
|
|
176
177
|
}))
|
|
177
178
|
};
|
|
178
179
|
}
|
|
179
|
-
const
|
|
180
|
+
const D = {
|
|
180
181
|
skeleton: {
|
|
181
|
-
graph:
|
|
182
|
+
graph: z.graph
|
|
182
183
|
}
|
|
183
184
|
}, k = 32, y = 294 - k, w = y - k;
|
|
184
|
-
function
|
|
185
|
+
function te() {
|
|
185
186
|
const e = C(5);
|
|
186
187
|
let n, r;
|
|
187
188
|
e[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (n = {
|
|
@@ -189,14 +190,14 @@ function ee() {
|
|
|
189
190
|
alignItems: "center",
|
|
190
191
|
justifyContent: "center",
|
|
191
192
|
position: "relative"
|
|
192
|
-
}, r = /* @__PURE__ */ p(
|
|
193
|
+
}, r = /* @__PURE__ */ p(g, { variant: "circular", width: y, height: y }), e[0] = n, e[1] = r) : (n = e[0], r = e[1]);
|
|
193
194
|
let o;
|
|
194
|
-
e[2] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (o = /* @__PURE__ */ p(
|
|
195
|
+
e[2] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (o = /* @__PURE__ */ p(g, { sx: {
|
|
195
196
|
position: "absolute",
|
|
196
197
|
zIndex: 1
|
|
197
198
|
}, variant: "circular", width: w, height: w }), e[2] = o) : o = e[2];
|
|
198
|
-
let
|
|
199
|
-
e[3] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (
|
|
199
|
+
let f;
|
|
200
|
+
e[3] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (f = /* @__PURE__ */ x(h, { sx: n, children: [
|
|
200
201
|
r,
|
|
201
202
|
o,
|
|
202
203
|
/* @__PURE__ */ x(h, { sx: {
|
|
@@ -206,60 +207,60 @@ function ee() {
|
|
|
206
207
|
flexDirection: "column",
|
|
207
208
|
alignItems: "center",
|
|
208
209
|
justifyContent: "center",
|
|
209
|
-
gap:
|
|
210
|
+
gap: B
|
|
210
211
|
}, children: [
|
|
211
|
-
/* @__PURE__ */ p(
|
|
212
|
-
/* @__PURE__ */ p(
|
|
212
|
+
/* @__PURE__ */ p(g, { height: 24, width: 72 }),
|
|
213
|
+
/* @__PURE__ */ p(g, { height: 8, width: 48 })
|
|
213
214
|
] })
|
|
214
|
-
] }), e[3] =
|
|
215
|
+
] }), e[3] = f) : f = e[3];
|
|
215
216
|
let c;
|
|
216
|
-
return e[4] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (c = /* @__PURE__ */ x(h, { sx:
|
|
217
|
-
|
|
217
|
+
return e[4] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (c = /* @__PURE__ */ x(h, { sx: D.skeleton.graph.container, children: [
|
|
218
|
+
f,
|
|
218
219
|
/* @__PURE__ */ p(h, { sx: {
|
|
219
220
|
display: "flex",
|
|
220
221
|
alignItems: "center",
|
|
221
|
-
gap:
|
|
222
|
-
height:
|
|
223
|
-
}, children: Array(2).fill(0).map(
|
|
222
|
+
gap: V,
|
|
223
|
+
height: W
|
|
224
|
+
}, children: Array(2).fill(0).map(E) })
|
|
224
225
|
] }), e[4] = c) : c = e[4], c;
|
|
225
226
|
}
|
|
226
|
-
function
|
|
227
|
+
function E(e, n) {
|
|
227
228
|
return /* @__PURE__ */ x(h, { sx: {
|
|
228
229
|
display: "flex",
|
|
229
230
|
alignItems: "center",
|
|
230
|
-
gap:
|
|
231
|
+
gap: M
|
|
231
232
|
}, children: [
|
|
232
|
-
/* @__PURE__ */ p(
|
|
233
|
-
/* @__PURE__ */ p(
|
|
233
|
+
/* @__PURE__ */ p(g, { variant: "circular", width: 8, height: 8 }),
|
|
234
|
+
/* @__PURE__ */ p(g, { width: 48, height: 8 })
|
|
234
235
|
] }, `skeleton-${n}`);
|
|
235
236
|
}
|
|
236
|
-
function
|
|
237
|
+
function M(e) {
|
|
237
238
|
const {
|
|
238
239
|
spacing: n
|
|
239
240
|
} = e;
|
|
240
241
|
return n(1.5);
|
|
241
242
|
}
|
|
242
|
-
function
|
|
243
|
+
function W(e) {
|
|
243
244
|
const {
|
|
244
245
|
spacing: n
|
|
245
246
|
} = e;
|
|
246
247
|
return n(5);
|
|
247
248
|
}
|
|
248
|
-
function
|
|
249
|
+
function V(e) {
|
|
249
250
|
const {
|
|
250
251
|
spacing: n
|
|
251
252
|
} = e;
|
|
252
253
|
return n(2);
|
|
253
254
|
}
|
|
254
|
-
function
|
|
255
|
+
function B(e) {
|
|
255
256
|
const {
|
|
256
257
|
spacing: n
|
|
257
258
|
} = e;
|
|
258
259
|
return n(1);
|
|
259
260
|
}
|
|
260
261
|
export {
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
262
|
+
te as PieSkeleton,
|
|
263
|
+
ee as pieConfig,
|
|
264
|
+
F as pieDownloadConfig
|
|
264
265
|
};
|
|
265
266
|
//# sourceMappingURL=pie.js.map
|
package/dist/widgets/pie.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pie.js","sources":["../../src/widgets/pie/config.ts","../../src/widgets/pie/style.ts","../../src/widgets/pie/skeleton.tsx"],"sourcesContent":["import {\n getCommonOptions,\n mergeEchartWidgetConfig,\n type EchartOptionsProps,\n} from '../echart'\nimport type { PieConfig, PieWidgetConfig, PieWidgetData } from './types'\nimport {\n buildGridConfig,\n buildLegendConfig,\n flattenObjectArrayToCSV,\n createTooltipPositioner,\n createTooltipFormatter,\n createChartDownloadConfig,\n niceNum,\n} from '../utils/chart-config'\n\nexport const pieDownloadConfig = createChartDownloadConfig<PieWidgetData>(\n flattenObjectArrayToCSV,\n)\n\n/**\n * Generates ECharts configuration for pie and donut chart widgets. Falls back to a horizontal bar layout when multiple data series are provided.\n *\n * @param props - Pie chart configuration including data and theme.\n * @returns Widget config with ECharts option object.\n */\nexport function pieConfig(props: PieConfig): PieWidgetConfig {\n return {\n type: 'pie',\n option: mergeEchartWidgetConfig(getCommonOptions(props), getOption(props)),\n formatter: props.formatter,\n labelFormatter: props.labelFormatter,\n }\n}\n\nfunction getOption({\n data = [],\n theme,\n formatter,\n labelFormatter,\n}: PieConfig): EchartOptionsProps {\n const multiSeries = (data?.length ?? 0) > 1\n\n if (multiSeries) {\n let niceMin = 0\n let niceMax = 1\n\n return {\n legend: buildLegendConfig({ hasLegend: true, labelFormatter }),\n grid: {\n ...buildGridConfig(true, theme),\n right: parseInt(theme.spacing(4)),\n },\n xAxis: {\n type: 'value',\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 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 inside: true,\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 yAxis: {\n type: 'category',\n axisLine: {\n show: false,\n },\n axisTick: {\n show: false,\n },\n axisLabel: {\n padding: [parseInt(theme.spacing(0.5)), 0, 0, 0],\n ...(labelFormatter && {\n formatter: (value: string | number) =>\n String(labelFormatter(value)),\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?.x?.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 = labelFormatter\n ? String(labelFormatter(item.name ?? ''))\n : (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 barMaxWidth: 100,\n emphasis: {\n focus: 'series',\n },\n })),\n }\n }\n\n const hasLegend = true\n\n return {\n legend: buildLegendConfig({ hasLegend, labelFormatter }),\n grid: {\n ...buildGridConfig(hasLegend, theme),\n left: 0,\n top: 0,\n right: 0,\n },\n xAxis: {\n show: false,\n },\n yAxis: {\n show: false,\n },\n tooltip: {\n trigger: 'item',\n formatter: createTooltipFormatter((item) => {\n const value =\n item.value &&\n typeof item.value === 'object' &&\n !Array.isArray(item.value)\n ? (Object.values(item.value) as (string | number)[])\n : []\n const index = item.encode?.value?.at(0)\n const _value = value[index ?? 0]\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 = labelFormatter\n ? String(labelFormatter(item.name ?? ''))\n : (item.name ?? '')\n\n return {\n name: seriesName,\n seriesName: name,\n marker,\n value: formattedValue,\n }\n }),\n },\n color: Object.values(theme.palette.qualitative.bold),\n series: data.map((_: unknown, index: number) => ({\n datasetIndex: index,\n type: 'pie',\n colorBy: 'data',\n radius: ['74%', '90%'],\n avoidLabelOverlap: true,\n selectedOffset: 0,\n bottom: parseInt(theme.spacing(4)),\n\n label: {\n show: true,\n position: 'center',\n formatter: (params) => {\n const { name } = params\n const encodeIndex = params.encode?.value?.[0]\n if (encodeIndex === undefined) {\n return ''\n }\n\n const value = Object.values(params.data ?? {}).at(encodeIndex) as\n | number\n | string\n\n const formattedValue =\n typeof value === 'number' && formatter\n ? formatter(value)\n : (value ?? '')\n\n const nameFormatted = labelFormatter\n ? String(labelFormatter(name ?? ''))\n : (name ?? '')\n\n return `{c|${formattedValue}}\\n\\n{b|${nameFormatted}}`\n },\n rich: {\n b: {\n fontSize: 16,\n fontWeight: 'normal',\n lineHeight: 20,\n },\n c: {\n fontSize: 28,\n fontWeight: 'bold',\n lineHeight: 27,\n },\n },\n },\n emphasis: {\n disabled: true,\n },\n itemStyle: {\n borderColor: theme.palette.background.paper,\n borderWidth: 1,\n },\n })),\n } as EchartOptionsProps\n}\n","import type { SxProps, Theme } from '@mui/material'\nimport { baseSkeletonStyles } from '../utils/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\nconst GUTTER = 32\nconst SIZE = 294 - GUTTER\nconst INNER_SIZE = SIZE - GUTTER\n\nexport function PieSkeleton() {\n return (\n <Box sx={styles.skeleton.graph.container}>\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n position: 'relative',\n }}\n >\n <Skeleton variant='circular' width={SIZE} height={SIZE} />\n <Skeleton\n sx={{\n position: 'absolute',\n zIndex: 1,\n }}\n variant='circular'\n width={INNER_SIZE}\n height={INNER_SIZE}\n />\n <Box\n sx={{\n position: 'absolute',\n zIndex: 2,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n gap: ({ spacing }) => spacing(1),\n }}\n >\n <Skeleton height={24} width={72} />\n <Skeleton height={8} width={48} />\n </Box>\n </Box>\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n gap: ({ spacing }) => spacing(2),\n height: ({ spacing }) => spacing(5),\n }}\n >\n {Array(2)\n .fill(0)\n .map((_, i) => (\n <Box\n key={`skeleton-${i}`}\n sx={{\n display: 'flex',\n alignItems: 'center',\n gap: ({ spacing }) => spacing(1.5),\n }}\n >\n <Skeleton variant='circular' width={8} height={8} />\n <Skeleton width={48} height={8} />\n </Box>\n ))}\n </Box>\n </Box>\n )\n}\n"],"names":["pieDownloadConfig","createChartDownloadConfig","flattenObjectArrayToCSV","pieConfig","props","type","option","mergeEchartWidgetConfig","getCommonOptions","getOption","formatter","labelFormatter","data","theme","length","niceMin","niceMax","legend","buildLegendConfig","hasLegend","grid","buildGridConfig","right","parseInt","spacing","xAxis","min","extent","niceNum","max","axisLabel","fontSize","typography","overlineDelicate","fontFamily","margin","show","showMaxLabel","showMinLabel","verticalAlign","inside","value","String","axisLine","axisTick","splitLine","lineStyle","color","palette","black","yAxis","padding","tooltip","position","createTooltipPositioner","createTooltipFormatter","item","index","dimensionNames","encode","x","at","_value","formattedValue","marker","seriesName","name","series","map","_","datasetIndex","barMaxWidth","emphasis","focus","left","top","trigger","Array","isArray","Object","values","qualitative","bold","colorBy","radius","avoidLabelOverlap","selectedOffset","bottom","label","params","encodeIndex","undefined","nameFormatted","rich","b","fontWeight","lineHeight","c","disabled","itemStyle","borderColor","background","paper","borderWidth","styles","skeleton","graph","baseSkeletonStyles","GUTTER","SIZE","INNER_SIZE","PieSkeleton","$","_c","t0","t1","Symbol","for","display","alignItems","justifyContent","Skeleton","t2","jsx","zIndex","t3","Box","jsxs","flexDirection","gap","_temp","t4","container","_temp2","height","_temp3","fill","_temp5","i","_temp4","spacing_2","spacing_1","spacing_0"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pie.js","sources":["../../src/widgets/pie/config.ts","../../src/widgets/pie/style.ts","../../src/widgets/pie/skeleton.tsx"],"sourcesContent":["import {\n getCommonOptions,\n mergeEchartWidgetConfig,\n type EchartOptionsProps,\n} from '../echart'\nimport type { PieConfig, PieWidgetConfig, PieWidgetData } from './types'\nimport {\n buildGridConfig,\n buildLegendConfig,\n flattenObjectArrayToCSV,\n createTooltipPositioner,\n createTooltipFormatter,\n createChartDownloadConfig,\n niceNum,\n buildSeriesLabelConfig,\n} from '../utils/chart-config'\n\nexport const pieDownloadConfig = createChartDownloadConfig<PieWidgetData>(\n flattenObjectArrayToCSV,\n)\n\n/**\n * Generates ECharts configuration for pie and donut chart widgets. Falls back to a horizontal bar layout when multiple data series are provided.\n *\n * @param props - Pie chart configuration including data and theme.\n * @returns Widget config with ECharts option object.\n */\nexport function pieConfig(props: PieConfig): PieWidgetConfig {\n return {\n type: 'pie',\n option: mergeEchartWidgetConfig(getCommonOptions(props), getOption(props)),\n formatter: props.formatter,\n labelFormatter: props.labelFormatter,\n }\n}\n\nfunction getOption({\n data = [],\n theme,\n formatter,\n labelFormatter,\n}: PieConfig): EchartOptionsProps {\n const multiSeries = (data?.length ?? 0) > 1\n\n if (multiSeries) {\n let niceMin = 0\n let niceMax = 1\n\n return {\n legend: buildLegendConfig({ hasLegend: true, labelFormatter }),\n grid: {\n ...buildGridConfig(true, theme),\n right: parseInt(theme.spacing(4)),\n },\n xAxis: {\n type: 'value',\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 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 inside: true,\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 yAxis: {\n type: 'category',\n axisLine: {\n show: false,\n },\n axisTick: {\n show: false,\n },\n axisLabel: {\n padding: [parseInt(theme.spacing(0.5)), 0, 0, 0],\n ...(labelFormatter && {\n formatter: (value: string | number) =>\n String(labelFormatter(value)),\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?.x?.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 = labelFormatter\n ? String(labelFormatter(item.name ?? ''))\n : (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 barMaxWidth: 100,\n emphasis: {\n focus: 'series',\n },\n ...buildSeriesLabelConfig(formatter, 'x'),\n })),\n }\n }\n\n const hasLegend = true\n\n return {\n legend: buildLegendConfig({ hasLegend, labelFormatter }),\n grid: {\n ...buildGridConfig(hasLegend, theme),\n left: 0,\n top: 0,\n right: 0,\n },\n xAxis: {\n show: false,\n },\n yAxis: {\n show: false,\n },\n tooltip: {\n trigger: 'item',\n formatter: createTooltipFormatter((item) => {\n const value =\n item.value &&\n typeof item.value === 'object' &&\n !Array.isArray(item.value)\n ? (Object.values(item.value) as (string | number)[])\n : []\n const index = item.encode?.value?.at(0)\n const _value = value[index ?? 0]\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 = labelFormatter\n ? String(labelFormatter(item.name ?? ''))\n : (item.name ?? '')\n\n return {\n name: seriesName,\n seriesName: name,\n marker,\n value: formattedValue,\n }\n }),\n },\n color: Object.values(theme.palette.qualitative.bold),\n series: data.map((_: unknown, index: number) => ({\n datasetIndex: index,\n type: 'pie',\n colorBy: 'data',\n radius: ['74%', '90%'],\n avoidLabelOverlap: true,\n selectedOffset: 0,\n bottom: parseInt(theme.spacing(4)),\n\n label: {\n show: true,\n position: 'center',\n formatter: (params) => {\n const { name } = params\n const encodeIndex = params.encode?.value?.[0]\n if (encodeIndex === undefined) {\n return ''\n }\n\n const value = Object.values(params.data ?? {}).at(encodeIndex) as\n | number\n | string\n\n const formattedValue =\n typeof value === 'number' && formatter\n ? formatter(value)\n : (value ?? '')\n\n const nameFormatted = labelFormatter\n ? String(labelFormatter(name ?? ''))\n : (name ?? '')\n\n return `{c|${formattedValue}}\\n\\n{b|${nameFormatted}}`\n },\n rich: {\n b: {\n fontSize: 16,\n fontWeight: 'normal',\n lineHeight: 20,\n },\n c: {\n fontSize: 28,\n fontWeight: 'bold',\n lineHeight: 27,\n },\n },\n },\n emphasis: {\n disabled: true,\n },\n itemStyle: {\n borderColor: theme.palette.background.paper,\n borderWidth: 1,\n },\n })),\n } as EchartOptionsProps\n}\n","import type { SxProps, Theme } from '@mui/material'\nimport { baseSkeletonStyles } from '../utils/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\nconst GUTTER = 32\nconst SIZE = 294 - GUTTER\nconst INNER_SIZE = SIZE - GUTTER\n\nexport function PieSkeleton() {\n return (\n <Box sx={styles.skeleton.graph.container}>\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n position: 'relative',\n }}\n >\n <Skeleton variant='circular' width={SIZE} height={SIZE} />\n <Skeleton\n sx={{\n position: 'absolute',\n zIndex: 1,\n }}\n variant='circular'\n width={INNER_SIZE}\n height={INNER_SIZE}\n />\n <Box\n sx={{\n position: 'absolute',\n zIndex: 2,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n gap: ({ spacing }) => spacing(1),\n }}\n >\n <Skeleton height={24} width={72} />\n <Skeleton height={8} width={48} />\n </Box>\n </Box>\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n gap: ({ spacing }) => spacing(2),\n height: ({ spacing }) => spacing(5),\n }}\n >\n {Array(2)\n .fill(0)\n .map((_, i) => (\n <Box\n key={`skeleton-${i}`}\n sx={{\n display: 'flex',\n alignItems: 'center',\n gap: ({ spacing }) => spacing(1.5),\n }}\n >\n <Skeleton variant='circular' width={8} height={8} />\n <Skeleton width={48} height={8} />\n </Box>\n ))}\n </Box>\n </Box>\n )\n}\n"],"names":["pieDownloadConfig","createChartDownloadConfig","flattenObjectArrayToCSV","pieConfig","props","type","option","mergeEchartWidgetConfig","getCommonOptions","getOption","formatter","labelFormatter","data","theme","length","niceMin","niceMax","legend","buildLegendConfig","hasLegend","grid","buildGridConfig","right","parseInt","spacing","xAxis","min","extent","niceNum","max","axisLabel","fontSize","typography","overlineDelicate","fontFamily","margin","show","showMaxLabel","showMinLabel","verticalAlign","inside","value","String","axisLine","axisTick","splitLine","lineStyle","color","palette","black","yAxis","padding","tooltip","position","createTooltipPositioner","createTooltipFormatter","item","index","dimensionNames","encode","x","at","_value","formattedValue","marker","seriesName","name","series","map","_","datasetIndex","barMaxWidth","emphasis","focus","buildSeriesLabelConfig","left","top","trigger","Array","isArray","Object","values","qualitative","bold","colorBy","radius","avoidLabelOverlap","selectedOffset","bottom","label","params","encodeIndex","undefined","nameFormatted","rich","b","fontWeight","lineHeight","c","disabled","itemStyle","borderColor","background","paper","borderWidth","styles","skeleton","graph","baseSkeletonStyles","GUTTER","SIZE","INNER_SIZE","PieSkeleton","$","_c","t0","t1","Symbol","for","display","alignItems","justifyContent","Skeleton","t2","jsx","zIndex","t3","Box","jsxs","flexDirection","gap","_temp","t4","container","_temp2","height","_temp3","fill","_temp5","i","_temp4","spacing_2","spacing_1","spacing_0"],"mappings":";;;;;;;;;;;AAiBO,MAAMA,IAAoBC,EAC/BC,CACF;AAQO,SAASC,GAAUC,GAAmC;AAC3D,SAAO;AAAA,IACLC,MAAM;AAAA,IACNC,QAAQC,EAAwBC,EAAiBJ,CAAK,GAAGK,EAAUL,CAAK,CAAC;AAAA,IACzEM,WAAWN,EAAMM;AAAAA,IACjBC,gBAAgBP,EAAMO;AAAAA,EAAAA;AAE1B;AAEA,SAASF,EAAU;AAAA,EACjBG,MAAAA,IAAO,CAAA;AAAA,EACPC,OAAAA;AAAAA,EACAH,WAAAA;AAAAA,EACAC,gBAAAA;AACS,GAAuB;AAGhC,OAFqBC,GAAME,UAAU,KAAK,GAEzB;AACf,QAAIC,IAAU,GACVC,IAAU;AAEd,WAAO;AAAA,MACLC,QAAQC,EAAkB;AAAA,QAAEC,WAAW;AAAA,QAAMR,gBAAAA;AAAAA,MAAAA,CAAgB;AAAA,MAC7DS,MAAM;AAAA,QACJ,GAAGC,EAAgB,IAAMR,CAAK;AAAA,QAC9BS,OAAOC,SAASV,EAAMW,QAAQ,CAAC,CAAC;AAAA,MAAA;AAAA,MAElCC,OAAO;AAAA,QACLpB,MAAM;AAAA,QACNqB,KAAKA,CAACC,OACJZ,IAAUY,EAAOD,MAAM,IAAIE,EAAQD,EAAOD,GAAG,IAAI,GAC1CX;AAAAA,QAETc,KAAKA,CAACF,OACJX,IAAUW,EAAOE,OAAO,IAAI,IAAID,EAAQD,EAAOE,GAAG,GAC3Cb;AAAAA,QAETc,WAAW;AAAA,UACTC,UAAUlB,EAAMmB,WAAWC,iBAAiBF;AAAAA,UAC5CG,YAAYrB,EAAMmB,WAAWC,iBAAiBC;AAAAA,UAC9CC,QAAQZ,SAASV,EAAMW,QAAQ,CAAC,CAAC;AAAA,UACjCY,MAAM;AAAA,UACNC,cAAc;AAAA,UACdC,cAAc;AAAA,UACdC,eAAe;AAAA,UACfC,QAAQ;AAAA,UACR9B,WAAWA,CAAC+B,MACNA,MAAUzB,KAAWyB,MAAU1B,KAC/B0B,MAAU,IAAU,KACjB/B,IAAYA,EAAU+B,CAAK,IAAIC,OAAOD,CAAK;AAAA,QACpD;AAAA,QAEFE,UAAU;AAAA,UACRP,MAAM;AAAA,QAAA;AAAA,QAERQ,UAAU;AAAA,UACRR,MAAM;AAAA,QAAA;AAAA,QAERS,WAAW;AAAA,UACTT,MAAM;AAAA,UACNU,WAAW;AAAA,YACTC,OAAOlC,EAAMmC,QAAQC,MAAM,CAAC;AAAA,UAAA;AAAA,QAC9B;AAAA,MACF;AAAA,MAEFC,OAAO;AAAA,QACL7C,MAAM;AAAA,QACNsC,UAAU;AAAA,UACRP,MAAM;AAAA,QAAA;AAAA,QAERQ,UAAU;AAAA,UACRR,MAAM;AAAA,QAAA;AAAA,QAERN,WAAW;AAAA,UACTqB,SAAS,CAAC5B,SAASV,EAAMW,QAAQ,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC;AAAA,UAC/C,GAAIb,KAAkB;AAAA,YACpBD,WAAWA,CAAC+B,MACVC,OAAO/B,EAAe8B,CAAK,CAAC;AAAA,UAAA;AAAA,QAChC;AAAA,MACF;AAAA,MAEFW,SAAS;AAAA,QACPC,UAAUC,EAAwBzC,CAAK;AAAA,QACvCH,WAAW6C,EAAwBC,CAAAA,MAAS;AAC1C,gBAAMf,IAAQe,EAAKf,OACbgB,IAAQD,EAAKE,iBAAiBF,EAAKG,QAAQC,GAAGC,GAAG,CAAC,KAAK,CAAC,GACxDC,IAASrB,EAAMgB,KAAS,EAAE,GAE1BM,IACJ,OAAOD,KAAW,YAAYpD,IAC1BA,EAAUoD,CAAM,IACfA,KAAU,IAEXE,IAAS,OAAOR,EAAKQ,UAAW,WAAWR,EAAKQ,SAAS,IACzDC,IAAaT,EAAKS,aAAa,GAAGT,EAAKS,UAAU,OAAO;AAK9D,iBAAO;AAAA,YAAEC,MAJIvD,IACT+B,OAAO/B,EAAe6C,EAAKU,QAAQ,EAAE,CAAC,IACrCV,EAAKU,QAAQ;AAAA,YAEHD,YAAAA;AAAAA,YAAYD,QAAAA;AAAAA,YAAQvB,OAAOsB;AAAAA,UAAAA;AAAAA,QAC5C,CAAC;AAAA,MAAA;AAAA,MAEHI,QAAQvD,EAAKwD,IAAI,CAACC,GAAYZ,OAAmB;AAAA,QAC/Ca,cAAcb;AAAAA,QACdpD,MAAM;AAAA,QACNkE,aAAa;AAAA,QACbC,UAAU;AAAA,UACRC,OAAO;AAAA,QAAA;AAAA,QAET,GAAGC,EAAuBhE,GAAW,GAAG;AAAA,MAAA,EACxC;AAAA,IAAA;AAAA,EAEN;AAEA,QAAMS,IAAY;AAElB,SAAO;AAAA,IACLF,QAAQC,EAAkB;AAAA,MAAEC,WAAAA;AAAAA,MAAWR,gBAAAA;AAAAA,IAAAA,CAAgB;AAAA,IACvDS,MAAM;AAAA,MACJ,GAAGC,EAAgBF,GAAWN,CAAK;AAAA,MACnC8D,MAAM;AAAA,MACNC,KAAK;AAAA,MACLtD,OAAO;AAAA,IAAA;AAAA,IAETG,OAAO;AAAA,MACLW,MAAM;AAAA,IAAA;AAAA,IAERc,OAAO;AAAA,MACLd,MAAM;AAAA,IAAA;AAAA,IAERgB,SAAS;AAAA,MACPyB,SAAS;AAAA,MACTnE,WAAW6C,EAAwBC,CAAAA,MAAS;AAC1C,cAAMf,IACJe,EAAKf,SACL,OAAOe,EAAKf,SAAU,YACtB,CAACqC,MAAMC,QAAQvB,EAAKf,KAAK,IACpBuC,OAAOC,OAAOzB,EAAKf,KAAK,IACzB,CAAA,GACAgB,IAAQD,EAAKG,QAAQlB,OAAOoB,GAAG,CAAC,GAChCC,IAASrB,EAAMgB,KAAS,CAAC,GAEzBM,IACJ,OAAOD,KAAW,YAAYpD,IAC1BA,EAAUoD,CAAM,IACfA,KAAU,IAEXE,IAAS,OAAOR,EAAKQ,UAAW,WAAWR,EAAKQ,SAAS,IACzDC,IAAaT,EAAKS,aAAa,GAAGT,EAAKS,UAAU,OAAO,IACxDC,IAAOvD,IACT+B,OAAO/B,EAAe6C,EAAKU,QAAQ,EAAE,CAAC,IACrCV,EAAKU,QAAQ;AAElB,eAAO;AAAA,UACLA,MAAMD;AAAAA,UACNA,YAAYC;AAAAA,UACZF,QAAAA;AAAAA,UACAvB,OAAOsB;AAAAA,QAAAA;AAAAA,MAEX,CAAC;AAAA,IAAA;AAAA,IAEHhB,OAAOiC,OAAOC,OAAOpE,EAAMmC,QAAQkC,YAAYC,IAAI;AAAA,IACnDhB,QAAQvD,EAAKwD,IAAI,CAACC,GAAYZ,OAAmB;AAAA,MAC/Ca,cAAcb;AAAAA,MACdpD,MAAM;AAAA,MACN+E,SAAS;AAAA,MACTC,QAAQ,CAAC,OAAO,KAAK;AAAA,MACrBC,mBAAmB;AAAA,MACnBC,gBAAgB;AAAA,MAChBC,QAAQjE,SAASV,EAAMW,QAAQ,CAAC,CAAC;AAAA,MAEjCiE,OAAO;AAAA,QACLrD,MAAM;AAAA,QACNiB,UAAU;AAAA,QACV3C,WAAYgF,CAAAA,MAAW;AACrB,gBAAM;AAAA,YAAExB,MAAAA;AAAAA,UAAAA,IAASwB,GACXC,IAAcD,EAAO/B,QAAQlB,QAAQ,CAAC;AAC5C,cAAIkD,MAAgBC;AAClB,mBAAO;AAGT,gBAAMnD,IAAQuC,OAAOC,OAAOS,EAAO9E,QAAQ,CAAA,CAAE,EAAEiD,GAAG8B,CAAW,GAIvD5B,IACJ,OAAOtB,KAAU,YAAY/B,IACzBA,EAAU+B,CAAK,IACdA,KAAS,IAEVoD,IAAgBlF,IAClB+B,OAAO/B,EAAeuD,KAAQ,EAAE,CAAC,IAChCA,KAAQ;AAEb,iBAAO,MAAMH,CAAc;AAAA;AAAA,KAAW8B,CAAa;AAAA,QACrD;AAAA,QACAC,MAAM;AAAA,UACJC,GAAG;AAAA,YACDhE,UAAU;AAAA,YACViE,YAAY;AAAA,YACZC,YAAY;AAAA,UAAA;AAAA,UAEdC,GAAG;AAAA,YACDnE,UAAU;AAAA,YACViE,YAAY;AAAA,YACZC,YAAY;AAAA,UAAA;AAAA,QACd;AAAA,MACF;AAAA,MAEFzB,UAAU;AAAA,QACR2B,UAAU;AAAA,MAAA;AAAA,MAEZC,WAAW;AAAA,QACTC,aAAaxF,EAAMmC,QAAQsD,WAAWC;AAAAA,QACtCC,aAAa;AAAA,MAAA;AAAA,IACf,EACA;AAAA,EAAA;AAEN;AClPO,MAAMC,IAAS;AAAA,EACpBC,UAAU;AAAA,IACRC,OAAOC,EAAmBD;AAAAA,EAAAA;AAE9B,GCJME,IAAS,IACTC,IAAO,MAAMD,GACbE,IAAaD,IAAOD;AAEnB,SAAAG,KAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA;AAAA,MAAAC,GAAAC;AAAA,EAAAH,EAAA,CAAA,MAAAI,uBAAAC,IAAA,2BAAA,KAIKH,IAAA;AAAA,IAAAI,SACO;AAAA,IAAMC,YACH;AAAA,IAAQC,gBACJ;AAAA,IAAQpE,UACd;AAAA,EAAA,GAGZ+D,sBAACM,GAAA,EAAiB,SAAA,YAAkBZ,OAAAA,GAAcA,QAAAA,GAAI,GAAIG,OAAAE,GAAAF,OAAAG,MAAAD,IAAAF,EAAA,CAAA,GAAAG,IAAAH,EAAA,CAAA;AAAA,MAAAU;AAAA,EAAAV,EAAA,CAAA,MAAAI,uBAAAC,IAAA,2BAAA,KAC1DK,IAAA,gBAAAC,EAACF,KACK,IAAA;AAAA,IAAArE,UACQ;AAAA,IAAUwE,QACZ;AAAA,EAAA,GAEF,SAAA,YACDd,OAAAA,GACCA,QAAAA,GAAU,GAClBE,OAAAU,KAAAA,IAAAV,EAAA,CAAA;AAAA,MAAAa;AAAA,EAAAb,EAAA,CAAA,MAAAI,uBAAAC,IAAA,2BAAA,KAjBJQ,sBAACC,GAAA,EACK,IAAAZ,GAOJC,UAAAA;AAAAA,IAAAA;AAAAA,IACAO;AAAAA,IASA,gBAAAK,EAACD,KACK,IAAA;AAAA,MAAA1E,UACQ;AAAA,MAAUwE,QACZ;AAAA,MAACN,SACA;AAAA,MAAMU,eACA;AAAA,MAAQT,YACX;AAAA,MAAQC,gBACJ;AAAA,MAAQS,KACnBC;AAAAA,IAAAA,GAGP,UAAA;AAAA,MAAA,gBAAAP,EAACF,GAAA,EAAiB,QAAA,IAAW,OAAA,IAAE;AAAA,MAC/B,gBAAAE,EAACF,GAAA,EAAiB,QAAA,GAAU,OAAA,GAAA,CAAE;AAAA,IAAA,EAAA,CAChC;AAAA,EAAA,GACF,GAAMT,OAAAa,KAAAA,IAAAb,EAAA,CAAA;AAAA,MAAAmB;AAAA,SAAAnB,EAAA,CAAA,MAAAI,uBAAAC,IAAA,2BAAA,KAjCRc,sBAACL,GAAA,EAAQ,IAAAtB,EAAMC,SAASC,MAAM0B,WAC5BP,UAAAA;AAAAA,IAAAA;AAAAA,IAiCA,gBAAAF,EAACG,KACK,IAAA;AAAA,MAAAR,SACO;AAAA,MAAMC,YACH;AAAA,MAAQU,KACfI;AAAAA,MAA2BC,QACxBC;AAAAA,IAAAA,GAGT1D,gBAAM,CAAC,EAAC2D,KACD,CAAC,EAACrE,IACHsE,CAYJ,EAAA,CACL;AAAA,EAAA,GACF,GAAMzB,OAAAmB,KAAAA,IAAAnB,EAAA,CAAA,GA1DNmB;AA0DM;AA5DH,SAAAM,EAAArE,GAAAsE,GAAA;AAAA,SA+CK,gBAAAX,EAACD,KAEK,IAAA;AAAA,IAAAR,SACO;AAAA,IAAMC,YACH;AAAA,IAAQU,KACfU;AAAAA,EAAAA,GAGP,UAAA;AAAA,IAAA,gBAAAhB,EAACF,KAAiB,SAAA,YAAkB,OAAA,GAAW,QAAA,GAAC;AAAA,IAChD,gBAAAE,EAACF,GAAA,EAAgB,OAAA,IAAY,QAAA,EAAA,CAAC;AAAA,EAAA,EAAA,GARzB,YAAYiB,CAAC,EASpB;AAAM;AAzDX,SAAAC,EAAAzB,GAAA;AAoDe,QAAA;AAAA,IAAA3F,SAAAqH;AAAAA,EAAAA,IAAA1B;AAAW,SAAK3F,EAAQ,GAAG;AAAC;AApD3C,SAAAgH,EAAArB,GAAA;AAyCY,QAAA;AAAA,IAAA3F,SAAAsH;AAAAA,EAAAA,IAAA3B;AAAW,SAAK3F,EAAQ,CAAC;AAAC;AAzCtC,SAAA8G,EAAAnB,GAAA;AAwCS,QAAA;AAAA,IAAA3F,SAAAuH;AAAAA,EAAAA,IAAA5B;AAAW,SAAK3F,EAAQ,CAAC;AAAC;AAxCnC,SAAA2G,EAAAhB,GAAA;AA6BW,QAAA;AAAA,IAAA3F,SAAAA;AAAAA,EAAAA,IAAA2F;AAAW,SAAK3F,EAAQ,CAAC;AAAC;"}
|