@carto/ps-react-ui 4.6.1 → 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.
Files changed (35) hide show
  1. package/dist/options-CthfUJDz.js +46 -0
  2. package/dist/options-CthfUJDz.js.map +1 -0
  3. package/dist/styles-BYTyKQFP.js +142 -0
  4. package/dist/{styles-Y8q7Jff3.js.map → styles-BYTyKQFP.js.map} +1 -1
  5. package/dist/types/widgets/utils/chart-config/index.d.ts +1 -1
  6. package/dist/types/widgets/utils/chart-config/option-builders.d.ts +27 -0
  7. package/dist/widgets/actions.js +125 -120
  8. package/dist/widgets/actions.js.map +1 -1
  9. package/dist/widgets/bar.js +34 -30
  10. package/dist/widgets/bar.js.map +1 -1
  11. package/dist/widgets/echart.js +1 -1
  12. package/dist/widgets/histogram.js +64 -61
  13. package/dist/widgets/histogram.js.map +1 -1
  14. package/dist/widgets/pie.js +37 -36
  15. package/dist/widgets/pie.js.map +1 -1
  16. package/dist/widgets/scatterplot.js +30 -29
  17. package/dist/widgets/scatterplot.js.map +1 -1
  18. package/dist/widgets/timeseries.js +34 -33
  19. package/dist/widgets/timeseries.js.map +1 -1
  20. package/dist/widgets/utils.js +1 -1
  21. package/package.json +1 -1
  22. package/src/widgets/actions/relative-data/relative-data.test.tsx +23 -0
  23. package/src/widgets/actions/relative-data/relative-data.tsx +11 -2
  24. package/src/widgets/bar/config.ts +5 -0
  25. package/src/widgets/echart/options.ts +1 -4
  26. package/src/widgets/histogram/config.ts +9 -4
  27. package/src/widgets/pie/config.ts +2 -0
  28. package/src/widgets/scatterplot/config.ts +2 -0
  29. package/src/widgets/timeseries/config.ts +2 -0
  30. package/src/widgets/utils/chart-config/index.ts +2 -0
  31. package/src/widgets/utils/chart-config/option-builders.test.ts +105 -1
  32. package/src/widgets/utils/chart-config/option-builders.ts +56 -0
  33. package/dist/options-D9wflre6.js +0 -49
  34. package/dist/options-D9wflre6.js.map +0 -1
  35. package/dist/styles-Y8q7Jff3.js +0 -118
@@ -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":"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"}
@@ -1,28 +1,28 @@
1
- import { jsxs as g, jsx as i } from "react/jsx-runtime";
1
+ import { jsxs as g, jsx as n } from "react/jsx-runtime";
2
2
  import { c as h } 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 b } from "../options-D9wflre6.js";
7
+ import { g as b } from "../options-CthfUJDz.js";
8
8
  import { m as S } from "../utils-BOhInag6.js";
9
9
  import { c as v, s as k } from "../download-config-C3I0jWIL.js";
10
- import { g as w, b as L, a as I, e as _, c as A } from "../styles-Y8q7Jff3.js";
10
+ import { i as w, g as L, b as I, a as _, e as C, c as A } from "../styles-BYTyKQFP.js";
11
11
  import { Box as p, Skeleton as c } from "@mui/material";
12
- const X = v(k);
13
- function Y(e) {
12
+ const Y = v(k);
13
+ function G(e) {
14
14
  return {
15
15
  type: "scatterplot",
16
- option: S(b(e), C(e)),
16
+ option: S(b(e), D(e)),
17
17
  formatter: e.formatter,
18
18
  labelFormatter: e.labelFormatter
19
19
  };
20
20
  }
21
- function C({
21
+ function D({
22
22
  data: e = [],
23
23
  theme: t,
24
24
  formatter: o,
25
- labelFormatter: n
25
+ labelFormatter: i
26
26
  }) {
27
27
  const l = e.length > 1, m = {
28
28
  type: "value",
@@ -75,9 +75,9 @@ function C({
75
75
  }
76
76
  };
77
77
  return {
78
- legend: _({
78
+ legend: C({
79
79
  hasLegend: l,
80
- labelFormatter: n
80
+ labelFormatter: i
81
81
  }),
82
82
  grid: {
83
83
  ...!l && {
@@ -87,15 +87,15 @@ function C({
87
87
  bottom: parseInt(t.spacing(10))
88
88
  }
89
89
  },
90
- xAxis: I(m, n),
91
- yAxis: L(u, o),
90
+ xAxis: _(m, i),
91
+ yAxis: I(u, o),
92
92
  tooltip: {
93
93
  trigger: "item",
94
94
  // position: createTooltipPositioner(theme),
95
- formatter: w((a) => {
95
+ formatter: L((a) => {
96
96
  const r = a.value, y = a.encode?.y?.at(0), s = r[y ?? ""], d = typeof s == "number" && o ? o(s) : s ?? "", x = typeof a.marker == "string" ? a.marker : "";
97
97
  return {
98
- name: n ? String(n(a.seriesName ?? "")) : a.seriesName ?? "",
98
+ name: i ? String(i(a.seriesName ?? "")) : a.seriesName ?? "",
99
99
  seriesName: "",
100
100
  marker: x,
101
101
  value: d
@@ -106,7 +106,8 @@ function C({
106
106
  series: e.map((a, r) => ({
107
107
  datasetIndex: r,
108
108
  type: "scatter",
109
- symbolSize: 8
109
+ symbolSize: 8,
110
+ ...w(o)
110
111
  }))
111
112
  };
112
113
  }
@@ -131,7 +132,7 @@ const f = {
131
132
  bottom: 0
132
133
  }
133
134
  }
134
- }, D = [{
135
+ }, T = [{
135
136
  left: "20%",
136
137
  top: "62%"
137
138
  }, {
@@ -177,34 +178,34 @@ const f = {
177
178
  left: "40%",
178
179
  top: "40%"
179
180
  }];
180
- function G() {
181
+ function H() {
181
182
  const e = h(2);
182
183
  let t;
183
- e[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t = D.map(z), e[0] = t) : t = e[0];
184
+ e[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t = T.map(O), e[0] = t) : t = e[0];
184
185
  let o;
185
186
  return e[1] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (o = /* @__PURE__ */ g(p, { sx: f.skeleton.graph.container, children: [
186
187
  t,
187
- /* @__PURE__ */ i(p, { sx: f.skeleton.legend, children: Array(2).fill(0).map(T) })
188
+ /* @__PURE__ */ n(p, { sx: f.skeleton.legend, children: Array(2).fill(0).map(F) })
188
189
  ] }), e[1] = o) : o = e[1], o;
189
190
  }
190
- function T(e, t) {
191
+ function F(e, t) {
191
192
  return /* @__PURE__ */ g(p, { sx: {
192
193
  display: "flex",
193
194
  alignItems: "center",
194
- gap: F
195
+ gap: z
195
196
  }, children: [
196
- /* @__PURE__ */ i(c, { variant: "circular", width: 8, height: 8 }),
197
- /* @__PURE__ */ i(c, { width: 48, height: 8 })
197
+ /* @__PURE__ */ n(c, { variant: "circular", width: 8, height: 8 }),
198
+ /* @__PURE__ */ n(c, { width: 48, height: 8 })
198
199
  ] }, `skeleton-${t}`);
199
200
  }
200
- function F(e) {
201
+ function z(e) {
201
202
  const {
202
203
  spacing: t
203
204
  } = e;
204
205
  return t(1.5);
205
206
  }
206
- function z(e, t) {
207
- return /* @__PURE__ */ i(c, { variant: "circular", width: 12, height: 12, sx: {
207
+ function O(e, t) {
208
+ return /* @__PURE__ */ n(c, { variant: "circular", width: 12, height: 12, sx: {
208
209
  position: "absolute",
209
210
  top: e.top,
210
211
  left: e.left,
@@ -212,8 +213,8 @@ function z(e, t) {
212
213
  } }, `skeleton-point-${t}`);
213
214
  }
214
215
  export {
215
- G as ScatterplotSkeleton,
216
- Y as scatterplotConfig,
217
- X as scatterplotDownloadConfig
216
+ H as ScatterplotSkeleton,
217
+ G as scatterplotConfig,
218
+ Y as scatterplotDownloadConfig
218
219
  };
219
220
  //# sourceMappingURL=scatterplot.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"scatterplot.js","sources":["../../src/widgets/scatterplot/config.ts","../../src/widgets/scatterplot/style.ts","../../src/widgets/scatterplot/skeleton.tsx"],"sourcesContent":["import {\n getCommonOptions,\n mergeEchartWidgetConfig,\n type EchartOptionsProps,\n} from '../echart'\nimport type {\n ScatterplotConfig,\n ScatterplotWidgetConfig,\n ScatterplotWidgetData,\n} from './types'\nimport {\n scatterplotDataToCSV,\n buildLegendConfig,\n createTooltipFormatter,\n createChartDownloadConfig,\n applyYAxisFormatter,\n applyXAxisFormatter,\n} from '../utils/chart-config'\n\nexport const scatterplotDownloadConfig =\n createChartDownloadConfig<ScatterplotWidgetData>(scatterplotDataToCSV)\n\n/**\n * Generates ECharts configuration for X-Y scatter plot widgets with value axes, legend support, and CARTO qualitative color palette.\n *\n * @param props - Scatterplot configuration including data points and theme.\n * @returns Widget config with ECharts option object.\n */\nexport function scatterplotConfig(\n props: ScatterplotConfig,\n): ScatterplotWidgetConfig {\n return {\n type: 'scatterplot',\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}: ScatterplotConfig): EchartOptionsProps {\n const hasLegend = data.length > 1\n\n const xAxis = {\n type: 'value' as const,\n axisLine: { show: false },\n axisTick: { show: false },\n axisLabel: {\n fontSize: theme.typography.overlineDelicate.fontSize,\n fontFamily: theme.typography.overlineDelicate.fontFamily,\n showMinLabel: true,\n showMaxLabel: true,\n hideOverlap: true,\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 splitLine: {\n show: true,\n lineStyle: { color: theme.palette.black[4] },\n },\n }\n\n const yAxis = {\n type: 'value' as const,\n axisLabel: {\n fontSize: theme.typography.overlineDelicate.fontSize,\n fontFamily: theme.typography.overlineDelicate.fontFamily,\n inside: false,\n padding: [\n 0,\n 0,\n parseInt(theme.spacing(1.25)),\n parseInt(theme.spacing(3.25)),\n ],\n margin: 0,\n show: true,\n showMaxLabel: true,\n showMinLabel: false,\n align: 'right',\n verticalAlign: 'bottom',\n },\n axisLine: { show: false },\n axisTick: { show: false },\n splitLine: {\n show: true,\n lineStyle: { color: theme.palette.black[4] },\n },\n }\n\n return {\n legend: buildLegendConfig({ hasLegend, labelFormatter }),\n grid: {\n ...(!hasLegend && { bottom: parseInt(theme.spacing(1)) }),\n ...(hasLegend && { bottom: parseInt(theme.spacing(10)) }),\n },\n xAxis: applyXAxisFormatter(xAxis, labelFormatter),\n yAxis: applyYAxisFormatter(yAxis, formatter),\n tooltip: {\n trigger: 'item',\n // position: createTooltipPositioner(theme),\n formatter: createTooltipFormatter((item) => {\n const value = item.value as Record<string, string | number>\n const index = item.encode?.y?.at(0)\n const _value = value[index ?? '']\n\n const formattedValue =\n typeof _value === 'number' && formatter\n ? formatter(_value)\n : (_value ?? '')\n const marker = typeof item.marker === 'string' ? item.marker : ''\n const name = labelFormatter\n ? String(labelFormatter(item.seriesName ?? ''))\n : (item.seriesName ?? '')\n\n return { name, seriesName: '', marker, value: formattedValue }\n }),\n },\n color: Object.values(theme.palette.qualitative.bold),\n series: data.map((_: unknown, index: number) => ({\n datasetIndex: index,\n type: 'scatter',\n symbolSize: 8,\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: {\n container: {\n ...baseSkeletonStyles.graph.container,\n position: 'relative',\n },\n },\n legend: {\n display: 'flex',\n alignItems: 'center',\n gap: ({ spacing }) => spacing(2),\n height: ({ spacing }) => spacing(5),\n position: 'absolute',\n bottom: 0,\n },\n },\n} satisfies Record<string, SxProps<Theme>>\n","import { Box, Skeleton } from '@mui/material'\nimport { styles } from './style'\n\nconst SCATTER_POINTS = [\n { left: '20%', top: '62%' },\n { left: '26%', top: '70%' },\n { left: '29%', top: '73%' },\n { left: '38%', top: '63%' },\n { left: '41%', top: '68%' },\n { left: '47%', top: '62%' },\n { left: '53%', top: '49%' },\n { left: '56%', top: '55%' },\n { left: '65%', top: '37%' },\n { left: '68%', top: '43%' },\n { left: '77%', top: '59%' },\n { left: '25%', top: '30%' },\n { left: '60%', top: '70%' },\n { left: '10%', top: '55%' },\n { left: '40%', top: '40%' },\n]\n\nexport function ScatterplotSkeleton() {\n return (\n <Box sx={styles.skeleton.graph.container}>\n {SCATTER_POINTS.map((point, index) => (\n <Skeleton\n key={`skeleton-point-${index}`}\n variant='circular'\n width={12}\n height={12}\n sx={{\n position: 'absolute',\n top: point.top,\n left: point.left,\n transform: 'translate(-50%, -50%)',\n }}\n />\n ))}\n {/* Legend */}\n <Box sx={styles.skeleton.legend}>\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":["scatterplotDownloadConfig","createChartDownloadConfig","scatterplotDataToCSV","scatterplotConfig","props","type","option","mergeEchartWidgetConfig","getCommonOptions","getOption","formatter","labelFormatter","data","theme","hasLegend","length","xAxis","axisLine","show","axisTick","axisLabel","fontSize","typography","overlineDelicate","fontFamily","showMinLabel","showMaxLabel","hideOverlap","padding","parseInt","spacing","color","palette","black","splitLine","lineStyle","yAxis","inside","margin","align","verticalAlign","legend","buildLegendConfig","grid","bottom","applyXAxisFormatter","applyYAxisFormatter","tooltip","trigger","createTooltipFormatter","item","value","index","encode","y","at","_value","formattedValue","marker","name","String","seriesName","Object","values","qualitative","bold","series","map","_","datasetIndex","symbolSize","styles","skeleton","graph","container","baseSkeletonStyles","position","display","alignItems","gap","height","SCATTER_POINTS","left","top","ScatterplotSkeleton","$","_c","t0","Symbol","for","_temp","t1","Box","jsx","Array","fill","_temp3","i","jsxs","_temp2","Skeleton","point","transform"],"mappings":"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"}
1
+ {"version":3,"file":"scatterplot.js","sources":["../../src/widgets/scatterplot/config.ts","../../src/widgets/scatterplot/style.ts","../../src/widgets/scatterplot/skeleton.tsx"],"sourcesContent":["import {\n getCommonOptions,\n mergeEchartWidgetConfig,\n type EchartOptionsProps,\n} from '../echart'\nimport type {\n ScatterplotConfig,\n ScatterplotWidgetConfig,\n ScatterplotWidgetData,\n} from './types'\nimport {\n scatterplotDataToCSV,\n buildLegendConfig,\n createTooltipFormatter,\n createChartDownloadConfig,\n applyYAxisFormatter,\n applyXAxisFormatter,\n buildSeriesLabelConfig,\n} from '../utils/chart-config'\n\nexport const scatterplotDownloadConfig =\n createChartDownloadConfig<ScatterplotWidgetData>(scatterplotDataToCSV)\n\n/**\n * Generates ECharts configuration for X-Y scatter plot widgets with value axes, legend support, and CARTO qualitative color palette.\n *\n * @param props - Scatterplot configuration including data points and theme.\n * @returns Widget config with ECharts option object.\n */\nexport function scatterplotConfig(\n props: ScatterplotConfig,\n): ScatterplotWidgetConfig {\n return {\n type: 'scatterplot',\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}: ScatterplotConfig): EchartOptionsProps {\n const hasLegend = data.length > 1\n\n const xAxis = {\n type: 'value' as const,\n axisLine: { show: false },\n axisTick: { show: false },\n axisLabel: {\n fontSize: theme.typography.overlineDelicate.fontSize,\n fontFamily: theme.typography.overlineDelicate.fontFamily,\n showMinLabel: true,\n showMaxLabel: true,\n hideOverlap: true,\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 splitLine: {\n show: true,\n lineStyle: { color: theme.palette.black[4] },\n },\n }\n\n const yAxis = {\n type: 'value' as const,\n axisLabel: {\n fontSize: theme.typography.overlineDelicate.fontSize,\n fontFamily: theme.typography.overlineDelicate.fontFamily,\n inside: false,\n padding: [\n 0,\n 0,\n parseInt(theme.spacing(1.25)),\n parseInt(theme.spacing(3.25)),\n ],\n margin: 0,\n show: true,\n showMaxLabel: true,\n showMinLabel: false,\n align: 'right',\n verticalAlign: 'bottom',\n },\n axisLine: { show: false },\n axisTick: { show: false },\n splitLine: {\n show: true,\n lineStyle: { color: theme.palette.black[4] },\n },\n }\n\n return {\n legend: buildLegendConfig({ hasLegend, labelFormatter }),\n grid: {\n ...(!hasLegend && { bottom: parseInt(theme.spacing(1)) }),\n ...(hasLegend && { bottom: parseInt(theme.spacing(10)) }),\n },\n xAxis: applyXAxisFormatter(xAxis, labelFormatter),\n yAxis: applyYAxisFormatter(yAxis, formatter),\n tooltip: {\n trigger: 'item',\n // position: createTooltipPositioner(theme),\n formatter: createTooltipFormatter((item) => {\n const value = item.value as Record<string, string | number>\n const index = item.encode?.y?.at(0)\n const _value = value[index ?? '']\n\n const formattedValue =\n typeof _value === 'number' && formatter\n ? formatter(_value)\n : (_value ?? '')\n const marker = typeof item.marker === 'string' ? item.marker : ''\n const name = labelFormatter\n ? String(labelFormatter(item.seriesName ?? ''))\n : (item.seriesName ?? '')\n\n return { name, seriesName: '', marker, value: formattedValue }\n }),\n },\n color: Object.values(theme.palette.qualitative.bold),\n series: data.map((_: unknown, index: number) => ({\n datasetIndex: index,\n type: 'scatter',\n symbolSize: 8,\n ...buildSeriesLabelConfig(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: {\n container: {\n ...baseSkeletonStyles.graph.container,\n position: 'relative',\n },\n },\n legend: {\n display: 'flex',\n alignItems: 'center',\n gap: ({ spacing }) => spacing(2),\n height: ({ spacing }) => spacing(5),\n position: 'absolute',\n bottom: 0,\n },\n },\n} satisfies Record<string, SxProps<Theme>>\n","import { Box, Skeleton } from '@mui/material'\nimport { styles } from './style'\n\nconst SCATTER_POINTS = [\n { left: '20%', top: '62%' },\n { left: '26%', top: '70%' },\n { left: '29%', top: '73%' },\n { left: '38%', top: '63%' },\n { left: '41%', top: '68%' },\n { left: '47%', top: '62%' },\n { left: '53%', top: '49%' },\n { left: '56%', top: '55%' },\n { left: '65%', top: '37%' },\n { left: '68%', top: '43%' },\n { left: '77%', top: '59%' },\n { left: '25%', top: '30%' },\n { left: '60%', top: '70%' },\n { left: '10%', top: '55%' },\n { left: '40%', top: '40%' },\n]\n\nexport function ScatterplotSkeleton() {\n return (\n <Box sx={styles.skeleton.graph.container}>\n {SCATTER_POINTS.map((point, index) => (\n <Skeleton\n key={`skeleton-point-${index}`}\n variant='circular'\n width={12}\n height={12}\n sx={{\n position: 'absolute',\n top: point.top,\n left: point.left,\n transform: 'translate(-50%, -50%)',\n }}\n />\n ))}\n {/* Legend */}\n <Box sx={styles.skeleton.legend}>\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":["scatterplotDownloadConfig","createChartDownloadConfig","scatterplotDataToCSV","scatterplotConfig","props","type","option","mergeEchartWidgetConfig","getCommonOptions","getOption","formatter","labelFormatter","data","theme","hasLegend","length","xAxis","axisLine","show","axisTick","axisLabel","fontSize","typography","overlineDelicate","fontFamily","showMinLabel","showMaxLabel","hideOverlap","padding","parseInt","spacing","color","palette","black","splitLine","lineStyle","yAxis","inside","margin","align","verticalAlign","legend","buildLegendConfig","grid","bottom","applyXAxisFormatter","applyYAxisFormatter","tooltip","trigger","createTooltipFormatter","item","value","index","encode","y","at","_value","formattedValue","marker","name","String","seriesName","Object","values","qualitative","bold","series","map","_","datasetIndex","symbolSize","buildSeriesLabelConfig","styles","skeleton","graph","container","baseSkeletonStyles","position","display","alignItems","gap","height","SCATTER_POINTS","left","top","ScatterplotSkeleton","$","_c","t0","Symbol","for","_temp","t1","Box","jsx","Array","fill","_temp3","i","jsxs","_temp2","Skeleton","point","transform"],"mappings":"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"}
@@ -1,24 +1,24 @@
1
- import { jsxs as m, jsx as r } from "react/jsx-runtime";
1
+ import { jsxs as m, jsx as s } from "react/jsx-runtime";
2
2
  import { c as y } 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 b } from "../options-D9wflre6.js";
7
+ import { g as b } from "../options-CthfUJDz.js";
8
8
  import { m as k } from "../utils-BOhInag6.js";
9
9
  import { c as v, f as w } from "../download-config-C3I0jWIL.js";
10
- import { g as L, b as C, a as I, d as S, e as _, c as A } from "../styles-Y8q7Jff3.js";
11
- import { Box as l, Skeleton as s } from "@mui/material";
12
- const Y = v(w);
13
- function z(e) {
10
+ import { i as L, g as C, b as I, a as S, d as _, e as A, c as j } from "../styles-BYTyKQFP.js";
11
+ import { Box as l, Skeleton as r } from "@mui/material";
12
+ const z = v(w);
13
+ function H(e) {
14
14
  return {
15
15
  type: "timeseries",
16
- option: k(b(e), j(e)),
16
+ option: k(b(e), T(e)),
17
17
  formatter: e.formatter,
18
18
  labelFormatter: e.labelFormatter
19
19
  };
20
20
  }
21
- function j({
21
+ function T({
22
22
  data: e = [],
23
23
  theme: t,
24
24
  formatter: i,
@@ -48,19 +48,19 @@ function j({
48
48
  }
49
49
  };
50
50
  return {
51
- legend: _({
51
+ legend: A({
52
52
  hasLegend: p,
53
53
  labelFormatter: o
54
54
  }),
55
55
  grid: {
56
- ...S(p, t),
56
+ ..._(p, t),
57
57
  outerBounds: {
58
58
  left: parseInt(t.spacing(3)),
59
59
  right: parseInt(t.spacing(1)),
60
60
  top: parseInt(t.spacing(2))
61
61
  }
62
62
  },
63
- xAxis: I({
63
+ xAxis: S({
64
64
  type: "category",
65
65
  axisTick: {
66
66
  alignWithLabel: !0
@@ -72,10 +72,10 @@ function j({
72
72
  rotate: 45
73
73
  }
74
74
  }, o),
75
- yAxis: C(h, i),
75
+ yAxis: I(h, i),
76
76
  tooltip: {
77
- formatter: L((a) => {
78
- const c = a.value, f = a.dimensionNames?.[a.encode?.y?.at(0) ?? 1], g = c[f ?? ""], u = typeof g == "number" && i ? i(g) : g ?? "", d = typeof a.marker == "string" ? a.marker : "", x = a.seriesName ? `${a.seriesName}: ` : "";
77
+ formatter: C((a) => {
78
+ const g = a.value, f = a.dimensionNames?.[a.encode?.y?.at(0) ?? 1], c = g[f ?? ""], u = typeof c == "number" && i ? i(c) : c ?? "", d = typeof a.marker == "string" ? a.marker : "", x = a.seriesName ? `${a.seriesName}: ` : "";
79
79
  return {
80
80
  name: o ? String(o(a.name ?? "")) : a.name ?? "",
81
81
  seriesName: x,
@@ -85,13 +85,14 @@ function j({
85
85
  })
86
86
  },
87
87
  color: Object.values(t.palette.qualitative.bold),
88
- series: e.map((a, c) => ({
89
- datasetIndex: c,
88
+ series: e.map((a, g) => ({
89
+ datasetIndex: g,
90
90
  type: "line",
91
91
  smooth: !0,
92
92
  emphasis: {
93
93
  focus: "series"
94
- }
94
+ },
95
+ ...L(i)
95
96
  }))
96
97
  };
97
98
  }
@@ -99,7 +100,7 @@ const n = {
99
100
  skeleton: {
100
101
  graph: {
101
102
  container: {
102
- ...A.graph.container,
103
+ ...j.graph.container,
103
104
  position: "relative"
104
105
  },
105
106
  grid: {
@@ -133,41 +134,41 @@ const n = {
133
134
  }
134
135
  }
135
136
  };
136
- function H() {
137
+ function J() {
137
138
  const e = y(2);
138
139
  let t;
139
140
  e[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t = /* @__PURE__ */ m(l, { sx: n.skeleton.graph.grid, children: [
140
- /* @__PURE__ */ r(s, { sx: n.skeleton.histogram.item, variant: "rectangular", height: "20%" }),
141
- /* @__PURE__ */ r(s, { sx: n.skeleton.histogram.item, variant: "rectangular", height: "40%" }),
142
- /* @__PURE__ */ r(s, { sx: n.skeleton.histogram.item, variant: "rectangular", height: "60%" }),
143
- /* @__PURE__ */ r(s, { sx: n.skeleton.histogram.item, variant: "rectangular", height: "20%" }),
144
- /* @__PURE__ */ r(s, { sx: n.skeleton.histogram.item, variant: "rectangular", height: "80%" })
141
+ /* @__PURE__ */ s(r, { sx: n.skeleton.histogram.item, variant: "rectangular", height: "20%" }),
142
+ /* @__PURE__ */ s(r, { sx: n.skeleton.histogram.item, variant: "rectangular", height: "40%" }),
143
+ /* @__PURE__ */ s(r, { sx: n.skeleton.histogram.item, variant: "rectangular", height: "60%" }),
144
+ /* @__PURE__ */ s(r, { sx: n.skeleton.histogram.item, variant: "rectangular", height: "20%" }),
145
+ /* @__PURE__ */ s(r, { sx: n.skeleton.histogram.item, variant: "rectangular", height: "80%" })
145
146
  ] }), e[0] = t) : t = e[0];
146
147
  let i;
147
148
  return e[1] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (i = /* @__PURE__ */ m(l, { sx: n.skeleton.graph.container, children: [
148
149
  t,
149
- /* @__PURE__ */ r(l, { sx: n.skeleton.legend, children: Array(2).fill(0).map(T) })
150
+ /* @__PURE__ */ s(l, { sx: n.skeleton.legend, children: Array(2).fill(0).map(M) })
150
151
  ] }), e[1] = i) : i = e[1], i;
151
152
  }
152
- function T(e, t) {
153
+ function M(e, t) {
153
154
  return /* @__PURE__ */ m(l, { sx: {
154
155
  display: "flex",
155
156
  alignItems: "center",
156
- gap: M
157
+ gap: N
157
158
  }, children: [
158
- /* @__PURE__ */ r(s, { variant: "circular", width: 8, height: 8 }),
159
- /* @__PURE__ */ r(s, { width: 48, height: 8 })
159
+ /* @__PURE__ */ s(r, { variant: "circular", width: 8, height: 8 }),
160
+ /* @__PURE__ */ s(r, { width: 48, height: 8 })
160
161
  ] }, `skeleton-${t}`);
161
162
  }
162
- function M(e) {
163
+ function N(e) {
163
164
  const {
164
165
  spacing: t
165
166
  } = e;
166
167
  return t(1.5);
167
168
  }
168
169
  export {
169
- H as TimeseriesSkeleton,
170
- z as timeseriesConfig,
171
- Y as timeseriesDownloadConfig
170
+ J as TimeseriesSkeleton,
171
+ H as timeseriesConfig,
172
+ z as timeseriesDownloadConfig
172
173
  };
173
174
  //# sourceMappingURL=timeseries.js.map