@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.
@@ -1,28 +1,28 @@
1
- import { jsx as m, jsxs as _ } from "react/jsx-runtime";
2
- import { c as L } from "react/compiler-runtime";
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-D9wflre6.js";
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 v, c as T } from "../styles-Y8q7Jff3.js";
10
- import { Box as f, Skeleton as d } from "@mui/material";
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 y } from "../exports-Cr43OCul.js";
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 D(e, n, t) {
18
+ function I(e, n, t) {
19
19
  if (!e?.length || e[0]?.length === 0) return [];
20
- const r = e[0]?.length ?? 0, a = x(r, n, t), o = e.length;
21
- return [o > 1 ? ["Bin", ...Array.from({
22
- length: o
23
- }, (c, s) => `Series ${s + 1}`)] : ["Bin", "Value"], ...a.map((c, s) => [c, ...e.map((i) => String(i[s] ?? 0))])];
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 ie({
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
- ...y,
35
- modifier: async (r) => y.modifier(D(r, n, t))
34
+ ...d,
35
+ modifier: async (o) => d.modifier(I(o, n, t))
36
36
  }];
37
37
  }
38
- function x(e, n, t) {
39
- const r = (a) => String(t ? t(a) : a);
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
- }, (a, o) => {
43
- const p = n[o] ?? o, l = n[o + 1];
44
- return l !== void 0 && isFinite(l) ? `${r(p)}-${r(l)}` : `${r(p)}+`;
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), I(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 I({
55
+ function N({
55
56
  data: e = [],
56
57
  ticks: n,
57
58
  theme: t,
58
- formatter: r,
59
- labelFormatter: a
59
+ formatter: o,
60
+ labelFormatter: r
60
61
  }) {
61
- const o = (e?.length ?? 0) > 1, p = e[0]?.length ?? 0, l = x(p, n, a);
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: v({
65
- hasLegend: o
65
+ legend: T({
66
+ hasLegend: a,
67
+ labelFormatter: r
66
68
  }),
67
- grid: M(o, t),
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: !0,
78
- showMaxLabel: !0,
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 ? "" : r ? r(i) : String(i)
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 g = i.value, b = typeof g == "number" && r ? r(g) : String(g ?? ""), w = typeof i.marker == "string" ? i.marker : "", S = i.seriesName ? `${i.seriesName}: ` : "";
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: S,
129
- marker: w,
130
- value: b
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 N = {
148
+ const j = {
146
149
  skeleton: {
147
- graph: T.graph
150
+ graph: D.graph
148
151
  }
149
152
  };
150
- function oe() {
151
- const e = L(2);
153
+ function ae() {
154
+ const e = _(2);
152
155
  let n;
153
- e[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (n = /* @__PURE__ */ m(f, { sx: {
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: V,
158
- height: G,
160
+ gap: B,
161
+ height: V,
159
162
  width: "100%"
160
- }, children: Array(8).fill(0).map(z) }), e[0] = n) : n = e[0];
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__ */ _(f, { sx: N.skeleton.graph.container, children: [
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__ */ m(f, { sx: {
167
+ /* @__PURE__ */ g(f, { sx: {
165
168
  display: "flex",
166
169
  alignItems: "center",
167
170
  justifyContent: "space-between",
168
171
  width: "100%",
169
- mt: j
170
- }, children: Array(4).fill(0).map(F) })
172
+ mt: F
173
+ }, children: Array(4).fill(0).map(z) })
171
174
  ] }), e[1] = t) : t = e[1], t;
172
175
  }
173
- function F(e, n) {
174
- return /* @__PURE__ */ m(d, { width: 32, height: 8 }, `skeleton-label-${n}`);
176
+ function z(e, n) {
177
+ return /* @__PURE__ */ g(y, { width: 32, height: 8 }, `skeleton-label-${n}`);
175
178
  }
176
- function j(e) {
179
+ function F(e) {
177
180
  const {
178
181
  spacing: n
179
182
  } = e;
180
183
  return n(1);
181
184
  }
182
- function z(e, n) {
183
- const r = `${[60, 80, 95, 85, 70, 55, 40, 30][n]}%`;
184
- return /* @__PURE__ */ m(d, { variant: "rectangular", sx: {
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: r
189
+ height: o
187
190
  } }, `skeleton-bar-${n}`);
188
191
  }
189
- function G(e) {
192
+ function V(e) {
190
193
  const {
191
194
  spacing: n
192
195
  } = e;
193
196
  return n(30);
194
197
  }
195
- function V(e) {
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
- oe as HistogramSkeleton,
205
+ ae as HistogramSkeleton,
203
206
  re as histogramConfig,
204
- D as histogramDataToCSV,
205
- ie as histogramDownloadConfig
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":";;;;;;;;;;;;;;;;;AAqBO,SAASA,EACdC,GACAC,GACAC,GACY;AACZ,MAAI,CAACF,GAAMG,UAAUH,EAAK,CAAC,GAAGG,WAAW,EAAG,QAAO,CAAA;AAEnD,QAAMC,IAAaJ,EAAK,CAAC,GAAGG,UAAU,GAChCE,IAASC,EAAiBF,GAAYH,GAAOC,CAAc,GAC3DK,IAAcP,EAAKG;AAUzB,SAAO,CATSI,IAAc,IAG1B,CACE,OACA,GAAGC,MAAMC,KAAK;AAAA,IAAEN,QAAQI;AAAAA,EAAAA,GAAe,CAACG,GAAGC,MAAM,UAAUA,IAAI,CAAC,EAAE,CAAC,IAErE,CAAC,OAAO,OAAO,GAIjB,GAAGN,EAAOO,IAAI,CAACC,GAAOF,MAAM,CAC1BE,GACA,GAAGb,EAAKY,IAAKE,CAAAA,MAAWC,OAAOD,EAAOH,CAAC,KAAK,CAAC,CAAC,CAAC,CAChD,CAAC;AAEN;AAEO,SAASK,GAAwB;AAAA,EACtCC,OAAAA;AAAAA,EACAhB,OAAAA;AAAAA,EACAC,gBAAAA;AAC4B,GAA+B;AAC3D,SAAO,CACL;AAAA,IACE,GAAGgB;AAAAA,IACHC,UAAUA,MAAMD,EAAcC,SAASF,CAAK;AAAA,EAAA,GAE9C;AAAA,IACE,GAAGG;AAAAA,IACHD,UAAU,OAAOnB,MACfoB,EAAcD,SAASpB,EAAmBC,GAAMC,GAAOC,CAAc,CAAC;AAAA,EAAA,CACzE;AAEL;AAYA,SAASI,EACPF,GACAH,GACAC,GACU;AACV,QAAMmB,IAAMA,CAACC,MACMP,OAAjBb,IAAwBA,EAAeoB,CAAC,IAAYA,CAAX;AAE3C,SAAOd,MAAMC,KAAK;AAAA,IAAEN,QAAQC;AAAAA,EAAAA,GAAc,CAACM,GAAGC,MAAM;AAClD,UAAMY,IAAMtB,EAAMU,CAAC,KAAKA,GAClBa,IAAOvB,EAAMU,IAAI,CAAC;AACxB,WAAOa,MAASC,UAAaC,SAASF,CAAI,IACtC,GAAGH,EAAIE,CAAG,CAAC,IAAIF,EAAIG,CAAI,CAAC,KACxB,GAAGH,EAAIE,CAAG,CAAC;AAAA,EACjB,CAAC;AACH;AAaO,SAASI,GAAgBC,GAA+C;AAC7E,SAAO;AAAA,IACLC,MAAM;AAAA,IACNC,QAAQC,EAAwBC,EAAiBJ,CAAK,GAAGK,EAAUL,CAAK,CAAC;AAAA,IACzEM,WAAWN,EAAMM;AAAAA,EAAAA;AAErB;AAEA,SAASD,EAAU;AAAA,EACjBjC,MAAAA,IAAO,CAAA;AAAA,EACPC,OAAAA;AAAAA,EACAkC,OAAAA;AAAAA,EACAD,WAAAA;AAAAA,EACAhC,gBAAAA;AACe,GAAuB;AACtC,QAAMkC,KAAapC,GAAMG,UAAU,KAAK,GAClCC,IAAaJ,EAAK,CAAC,GAAGG,UAAU,GAChCkC,IAAa/B,EAAiBF,GAAYH,GAAOC,CAAc;AAErE,MAAIoC,IAAU,GACVC,IAAU;AAEd,SAAO;AAAA,IACLC,QAAQC,EAAkB;AAAA,MAAEL,WAAAA;AAAAA,IAAAA,CAAW;AAAA,IACvCM,MAAMC,EAAgBP,GAAWD,CAAK;AAAA,IACtCS,OAAO;AAAA,MACLf,MAAM;AAAA,MACN7B,MAAMqC;AAAAA,MACNQ,UAAU;AAAA,QACRC,MAAM;AAAA,MAAA;AAAA,MAERC,WAAW;AAAA,QACTC,UAAUb,EAAMc,WAAWC,iBAAiBF;AAAAA,QAC5CG,YAAYhB,EAAMc,WAAWC,iBAAiBC;AAAAA,QAC9CC,cAAc;AAAA,QACdC,cAAc;AAAA,QACdC,aAAa;AAAA,QACbC,QAAQ;AAAA,QACRC,SAAS,CACPC,SAAStB,EAAMuB,QAAQ,GAAG,CAAC,GAC3BD,SAAStB,EAAMuB,QAAQ,GAAG,CAAC,GAC3B,GACAD,SAAStB,EAAMuB,QAAQ,GAAG,CAAC,CAAC;AAAA,QAE9BC,OAAOxB,EAAMyB,QAAQC,MAAM,EAAE;AAAA,MAAA;AAAA,MAE/BC,UAAU;AAAA,QACRhB,MAAM;AAAA,MAAA;AAAA,MAERiB,WAAW;AAAA,QACTjB,MAAM;AAAA,QACNkB,WAAW;AAAA,UACTL,OAAOxB,EAAMyB,QAAQC,MAAM,CAAC;AAAA,QAAA;AAAA,MAC9B;AAAA,IACF;AAAA,IAEFI,OAAO;AAAA,MACLpC,MAAM;AAAA,MACNqC,KAAKA,CAACC,OACJ7B,IAAU6B,EAAOD,MAAM,IAAIE,EAAQD,EAAOD,GAAG,IAAI,GAC1C5B;AAAAA,MAET+B,KAAKA,CAACF,OACJ5B,IAAU4B,EAAOE,OAAO,IAAI,IAAID,EAAQD,EAAOE,GAAG,GAC3C9B;AAAAA,MAET+B,aAAa;AAAA,MACbvB,WAAW;AAAA,QACTC,UAAUb,EAAMc,WAAWC,iBAAiBF;AAAAA,QAC5CG,YAAYhB,EAAMc,WAAWC,iBAAiBC;AAAAA,QAC9CI,QAAQE,SAAStB,EAAMuB,QAAQ,CAAC,CAAC;AAAA,QACjCZ,MAAM;AAAA,QACNO,cAAc;AAAA,QACdD,cAAc;AAAA,QACdmB,eAAe;AAAA,QACfrC,WAAWA,CAACsC,MACNA,MAAUjC,KAAWiC,MAAUlC,KAC/BkC,MAAU,IAAU,KACjBtC,IAAYA,EAAUsC,CAAK,IAAIzD,OAAOyD,CAAK;AAAA,MACpD;AAAA,MAEF3B,UAAU;AAAA,QACRC,MAAM;AAAA,MAAA;AAAA,MAERgB,UAAU;AAAA,QACRhB,MAAM;AAAA,MAAA;AAAA,MAERiB,WAAW;AAAA,QACTjB,MAAM;AAAA,QACNkB,WAAW;AAAA,UACTL,OAAOxB,EAAMyB,QAAQC,MAAM,CAAC;AAAA,QAAA;AAAA,MAC9B;AAAA,IACF;AAAA,IAEFY,SAAS;AAAA,MACPC,UAAUC,EAAwBxC,CAAK;AAAA,MACvCD,WAAW0C,EAAwBC,CAAAA,MAAS;AAC1C,cAAMC,IAASD,EAAKL,OAEdO,IACJ,OAAOD,KAAW,YAAY5C,IAC1BA,EAAU4C,CAAM,IAChB/D,OAAO+D,KAAU,EAAE,GAEnBE,IAAS,OAAOH,EAAKG,UAAW,WAAWH,EAAKG,SAAS,IACzDC,IAAaJ,EAAKI,aAAa,GAAGJ,EAAKI,UAAU,OAAO;AAG9D,eAAO;AAAA,UAAEC,MAFIL,EAAKK,QAAQ;AAAA,UAEXD,YAAAA;AAAAA,UAAYD,QAAAA;AAAAA,UAAQR,OAAOO;AAAAA,QAAAA;AAAAA,MAC5C,CAAC;AAAA,IAAA;AAAA,IAEHjE,QAAQd,EAAKY,IAAI,CAACuE,OAA0B;AAAA,MAC1CtD,MAAM;AAAA,MACN7B,MAAMmF;AAAAA,MACNC,QAAQ;AAAA,MACRC,gBAAgB;AAAA,MAChBC,UAAU;AAAA,QACRC,OAAO;AAAA,MAAA;AAAA,IACT,EACA;AAAA,EAAA;AAEN;AC/NO,MAAMC,IAAS;AAAA,EACpBC,UAAU;AAAA,IACRC,OAAOC,EAAmBD;AAAAA,EAAAA;AAE9B;ACJO,SAAAE,KAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA;AAAA,MAAAC;AAAA,EAAAF,EAAA,CAAA,MAAAG,uBAAAC,IAAA,2BAAA,KAGDF,IAAA,gBAAAG,EAACC,KACK,IAAA;AAAA,IAAAC,SACO;AAAA,IAAMC,YACH;AAAA,IAAUC,gBACN;AAAA,IAAeC,KAC1BC;AAAAA,IAA6BC,QAC1BC;AAAAA,IAA4BC,OAC7B;AAAA,EAAA,GAGRnG,gBAAM,CAAC,EAACoG,KACD,CAAC,EAAChG,IACHiG,CAcJ,GACL,GAAMhB,OAAAE,KAAAA,IAAAF,EAAA,CAAA;AAAA,MAAAiB;AAAA,SAAAjB,EAAA,CAAA,MAAAG,uBAAAC,IAAA,2BAAA,KA5BRa,sBAACX,GAAA,EAAQ,IAAAX,EAAMC,SAASC,MAAMqB,WAC5BhB,UAAAA;AAAAA,IAAAA;AAAAA,IA4BA,gBAAAG,EAACC,KACK,IAAA;AAAA,MAAAC,SACO;AAAA,MAAMC,YACH;AAAA,MAAQC,gBACJ;AAAA,MAAeK,OACxB;AAAA,MAAMK,IACTC;AAAAA,IAAAA,GAGLzG,gBAAM,CAAC,EAACoG,KACD,CAAC,EAAChG,IACHsG,CAEJ,EAAA,CACL;AAAA,EAAA,GACF,GAAMrB,OAAAiB,KAAAA,IAAAjB,EAAA,CAAA,GA5CNiB;AA4CM;AA9CH,SAAAI,EAAAC,GAAAC,GAAA;AAAA,SA2CK,gBAAAlB,EAACmB,KAA4C,OAAA,IAAY,aAA1C,kBAAkB1G,CAAC,EAAwB;AAAI;AA3CnE,SAAAsG,EAAAlB,GAAA;AAqCQ,QAAA;AAAA,IAAArC,SAAA4D;AAAAA,EAAAA,IAAAvB;AAAW,SAAKrC,EAAQ,CAAC;AAAC;AArClC,SAAAmD,EAAAnG,GAAAC,GAAA;AAkBK,QAAA8F,IAAe,GADC,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,EACrB9F,CAAC,CAAC;AAAG,SAE7B,gBAAAuF,EAACmB,GAAA,EAES,SAAA,eACJ,IAAA;AAAA,IAAAE,MACI;AAAA,IAACd,QAAAA;AAAAA,EAAAA,EAET,GALK,gBAAgB9F,CAAC,EAKrB;AACD;AA3BT,SAAA+F,EAAAX,GAAA;AASY,QAAA;AAAA,IAAArC,SAAA8D;AAAAA,EAAAA,IAAAzB;AAAW,SAAKrC,EAAQ,EAAE;AAAC;AATvC,SAAA8C,EAAAT,GAAA;AAQS,QAAA;AAAA,IAAArC,SAAAA;AAAAA,EAAAA,IAAAqC;AAAW,SAAKrC,EAAQ,GAAG;AAAC;"}
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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"}
@@ -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-D9wflre6.js";
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 O, n as v, d as S, e as _, c as T } from "../styles-Y8q7Jff3.js";
11
- import { Box as h, Skeleton as f } from "@mui/material";
12
- const Y = j(A);
13
- function F(e) {
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), z(e)),
16
+ option: N(L(e), $(e)),
17
17
  formatter: e.formatter,
18
18
  labelFormatter: e.labelFormatter
19
19
  };
20
20
  }
21
- function z({
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: O(n),
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: T.graph
182
+ graph: z.graph
182
183
  }
183
184
  }, k = 32, y = 294 - k, w = y - k;
184
- function ee() {
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(f, { variant: "circular", width: y, height: y }), e[0] = n, e[1] = r) : (n = e[0], r = e[1]);
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(f, { sx: {
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 g;
199
- e[3] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (g = /* @__PURE__ */ x(h, { sx: n, children: [
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: V
210
+ gap: B
210
211
  }, children: [
211
- /* @__PURE__ */ p(f, { height: 24, width: 72 }),
212
- /* @__PURE__ */ p(f, { height: 8, width: 48 })
212
+ /* @__PURE__ */ p(g, { height: 24, width: 72 }),
213
+ /* @__PURE__ */ p(g, { height: 8, width: 48 })
213
214
  ] })
214
- ] }), e[3] = g) : g = 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: $.skeleton.graph.container, children: [
217
- g,
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: W,
222
- height: M
223
- }, children: Array(2).fill(0).map(D) })
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 D(e, n) {
227
+ function E(e, n) {
227
228
  return /* @__PURE__ */ x(h, { sx: {
228
229
  display: "flex",
229
230
  alignItems: "center",
230
- gap: E
231
+ gap: M
231
232
  }, children: [
232
- /* @__PURE__ */ p(f, { variant: "circular", width: 8, height: 8 }),
233
- /* @__PURE__ */ p(f, { width: 48, height: 8 })
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 E(e) {
237
+ function M(e) {
237
238
  const {
238
239
  spacing: n
239
240
  } = e;
240
241
  return n(1.5);
241
242
  }
242
- function M(e) {
243
+ function W(e) {
243
244
  const {
244
245
  spacing: n
245
246
  } = e;
246
247
  return n(5);
247
248
  }
248
- function W(e) {
249
+ function V(e) {
249
250
  const {
250
251
  spacing: n
251
252
  } = e;
252
253
  return n(2);
253
254
  }
254
- function V(e) {
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
- ee as PieSkeleton,
262
- F as pieConfig,
263
- Y as pieDownloadConfig
262
+ te as PieSkeleton,
263
+ ee as pieConfig,
264
+ F as pieDownloadConfig
264
265
  };
265
266
  //# sourceMappingURL=pie.js.map
@@ -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;"}