@carto/ps-react-ui 4.6.2 → 4.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/dist/{download-config-C3I0jWIL.js → download-config-DNLkypdN.js} +8 -7
  2. package/dist/{download-config-C3I0jWIL.js.map → download-config-DNLkypdN.js.map} +1 -1
  3. package/dist/options-CthfUJDz.js +46 -0
  4. package/dist/options-CthfUJDz.js.map +1 -0
  5. package/dist/shared-resize-observer-98b1SK1e.js +17 -0
  6. package/dist/shared-resize-observer-98b1SK1e.js.map +1 -0
  7. package/dist/styles-BYTyKQFP.js +142 -0
  8. package/dist/{styles-Y8q7Jff3.js.map → styles-BYTyKQFP.js.map} +1 -1
  9. package/dist/types/widgets/actions/brush-toggle/brush-overlay.d.ts +24 -0
  10. package/dist/types/widgets/actions/brush-toggle/brush-toggle.d.ts +15 -10
  11. package/dist/types/widgets/actions/brush-toggle/hit-test.d.ts +19 -0
  12. package/dist/types/widgets/actions/brush-toggle/hit-test.test.d.ts +1 -0
  13. package/dist/types/widgets/actions/brush-toggle/style.d.ts +8 -0
  14. package/dist/types/widgets/actions/brush-toggle/types.d.ts +35 -1
  15. package/dist/types/widgets/utils/chart-config/index.d.ts +1 -1
  16. package/dist/types/widgets/utils/chart-config/option-builders.d.ts +27 -0
  17. package/dist/widgets/actions.js +985 -772
  18. package/dist/widgets/actions.js.map +1 -1
  19. package/dist/widgets/bar.js +34 -30
  20. package/dist/widgets/bar.js.map +1 -1
  21. package/dist/widgets/category.js +9 -8
  22. package/dist/widgets/category.js.map +1 -1
  23. package/dist/widgets/echart.js +79 -91
  24. package/dist/widgets/echart.js.map +1 -1
  25. package/dist/widgets/formula.js +43 -42
  26. package/dist/widgets/formula.js.map +1 -1
  27. package/dist/widgets/histogram.js +67 -63
  28. package/dist/widgets/histogram.js.map +1 -1
  29. package/dist/widgets/markdown.js +15 -14
  30. package/dist/widgets/markdown.js.map +1 -1
  31. package/dist/widgets/pie.js +38 -37
  32. package/dist/widgets/pie.js.map +1 -1
  33. package/dist/widgets/scatterplot.js +31 -30
  34. package/dist/widgets/scatterplot.js.map +1 -1
  35. package/dist/widgets/spread.js +47 -46
  36. package/dist/widgets/spread.js.map +1 -1
  37. package/dist/widgets/table.js +17 -16
  38. package/dist/widgets/table.js.map +1 -1
  39. package/dist/widgets/timeseries.js +35 -34
  40. package/dist/widgets/timeseries.js.map +1 -1
  41. package/dist/widgets/utils.js +2 -2
  42. package/package.json +3 -1
  43. package/src/widgets/actions/brush-toggle/brush-overlay.tsx +386 -0
  44. package/src/widgets/actions/brush-toggle/brush-toggle.tsx +88 -152
  45. package/src/widgets/actions/brush-toggle/hit-test.test.ts +65 -0
  46. package/src/widgets/actions/brush-toggle/hit-test.ts +45 -0
  47. package/src/widgets/actions/brush-toggle/style.ts +32 -0
  48. package/src/widgets/actions/brush-toggle/types.ts +36 -1
  49. package/src/widgets/bar/config.ts +5 -0
  50. package/src/widgets/echart/options.ts +1 -4
  51. package/src/widgets/histogram/config.ts +9 -4
  52. package/src/widgets/pie/config.ts +2 -0
  53. package/src/widgets/scatterplot/config.ts +2 -0
  54. package/src/widgets/timeseries/config.ts +2 -0
  55. package/src/widgets/utils/chart-config/index.ts +2 -0
  56. package/src/widgets/utils/chart-config/option-builders.test.ts +105 -1
  57. package/src/widgets/utils/chart-config/option-builders.ts +56 -0
  58. package/dist/options-D9wflre6.js +0 -49
  59. package/dist/options-D9wflre6.js.map +0 -1
  60. package/dist/styles-Y8q7Jff3.js +0 -118
@@ -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
- 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";
9
+ import { c as v, s as k } from "../download-config-DNLkypdN.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":";;;;;;;;;;;AAmBO,MAAMA,IACXC,EAAiDC,CAAoB;AAQhE,SAASC,EACdC,GACyB;AACzB,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;AACiB,GAAuB;AACxC,QAAMG,IAAYF,EAAKG,SAAS,GAE1BC,IAAQ;AAAA,IACZX,MAAM;AAAA,IACNY,UAAU;AAAA,MAAEC,MAAM;AAAA,IAAA;AAAA,IAClBC,UAAU;AAAA,MAAED,MAAM;AAAA,IAAA;AAAA,IAClBE,WAAW;AAAA,MACTC,UAAUR,EAAMS,WAAWC,iBAAiBF;AAAAA,MAC5CG,YAAYX,EAAMS,WAAWC,iBAAiBC;AAAAA,MAC9CC,cAAc;AAAA,MACdC,cAAc;AAAA,MACdC,aAAa;AAAA,MACbC,SAAS,CACPC,SAAShB,EAAMiB,QAAQ,GAAG,CAAC,GAC3BD,SAAShB,EAAMiB,QAAQ,GAAG,CAAC,GAC3B,GACAD,SAAShB,EAAMiB,QAAQ,GAAG,CAAC,CAAC;AAAA,MAE9BC,OAAOlB,EAAMmB,QAAQC,MAAM,EAAE;AAAA,IAAA;AAAA,IAE/BC,WAAW;AAAA,MACThB,MAAM;AAAA,MACNiB,WAAW;AAAA,QAAEJ,OAAOlB,EAAMmB,QAAQC,MAAM,CAAC;AAAA,MAAA;AAAA,IAAE;AAAA,EAC7C,GAGIG,IAAQ;AAAA,IACZ/B,MAAM;AAAA,IACNe,WAAW;AAAA,MACTC,UAAUR,EAAMS,WAAWC,iBAAiBF;AAAAA,MAC5CG,YAAYX,EAAMS,WAAWC,iBAAiBC;AAAAA,MAC9Ca,QAAQ;AAAA,MACRT,SAAS,CACP,GACA,GACAC,SAAShB,EAAMiB,QAAQ,IAAI,CAAC,GAC5BD,SAAShB,EAAMiB,QAAQ,IAAI,CAAC,CAAC;AAAA,MAE/BQ,QAAQ;AAAA,MACRpB,MAAM;AAAA,MACNQ,cAAc;AAAA,MACdD,cAAc;AAAA,MACdc,OAAO;AAAA,MACPC,eAAe;AAAA,IAAA;AAAA,IAEjBvB,UAAU;AAAA,MAAEC,MAAM;AAAA,IAAA;AAAA,IAClBC,UAAU;AAAA,MAAED,MAAM;AAAA,IAAA;AAAA,IAClBgB,WAAW;AAAA,MACThB,MAAM;AAAA,MACNiB,WAAW;AAAA,QAAEJ,OAAOlB,EAAMmB,QAAQC,MAAM,CAAC;AAAA,MAAA;AAAA,IAAE;AAAA,EAC7C;AAGF,SAAO;AAAA,IACLQ,QAAQC,EAAkB;AAAA,MAAE5B,WAAAA;AAAAA,MAAWH,gBAAAA;AAAAA,IAAAA,CAAgB;AAAA,IACvDgC,MAAM;AAAA,MACJ,GAAI,CAAC7B,KAAa;AAAA,QAAE8B,QAAQf,SAAShB,EAAMiB,QAAQ,CAAC,CAAC;AAAA,MAAA;AAAA,MACrD,GAAIhB,KAAa;AAAA,QAAE8B,QAAQf,SAAShB,EAAMiB,QAAQ,EAAE,CAAC;AAAA,MAAA;AAAA,IAAE;AAAA,IAEzDd,OAAO6B,EAAoB7B,GAAOL,CAAc;AAAA,IAChDyB,OAAOU,EAAoBV,GAAO1B,CAAS;AAAA,IAC3CqC,SAAS;AAAA,MACPC,SAAS;AAAA;AAAA,MAETtC,WAAWuC,EAAwBC,CAAAA,MAAS;AAC1C,cAAMC,IAAQD,EAAKC,OACbC,IAAQF,EAAKG,QAAQC,GAAGC,GAAG,CAAC,GAC5BC,IAASL,EAAMC,KAAS,EAAE,GAE1BK,IACJ,OAAOD,KAAW,YAAY9C,IAC1BA,EAAU8C,CAAM,IACfA,KAAU,IACXE,IAAS,OAAOR,EAAKQ,UAAW,WAAWR,EAAKQ,SAAS;AAK/D,eAAO;AAAA,UAAEC,MAJIhD,IACTiD,OAAOjD,EAAeuC,EAAKW,cAAc,EAAE,CAAC,IAC3CX,EAAKW,cAAc;AAAA,UAETA,YAAY;AAAA,UAAIH,QAAAA;AAAAA,UAAQP,OAAOM;AAAAA,QAAAA;AAAAA,MAChD,CAAC;AAAA,IAAA;AAAA,IAEH1B,OAAO+B,OAAOC,OAAOlD,EAAMmB,QAAQgC,YAAYC,IAAI;AAAA,IACnDC,QAAQtD,EAAKuD,IAAI,CAACC,GAAYhB,OAAmB;AAAA,MAC/CiB,cAAcjB;AAAAA,MACd/C,MAAM;AAAA,MACNiE,YAAY;AAAA,IAAA,EACZ;AAAA,EAAA;AAEN;AClIO,MAAMC,IAAS;AAAA,EACpBC,UAAU;AAAA,IACRC,OAAO;AAAA,MACLC,WAAW;AAAA,QACT,GAAGC,EAAmBF,MAAMC;AAAAA,QAC5BE,UAAU;AAAA,MAAA;AAAA,IACZ;AAAA,IAEFnC,QAAQ;AAAA,MACNoC,SAAS;AAAA,MACTC,YAAY;AAAA,MACZC,KAAKA,CAAC;AAAA,QAAEjD,SAAAA;AAAAA,MAAAA,MAAcA,EAAQ,CAAC;AAAA,MAC/BkD,QAAQA,CAAC;AAAA,QAAElD,SAAAA;AAAAA,MAAAA,MAAcA,EAAQ,CAAC;AAAA,MAClC8C,UAAU;AAAA,MACVhC,QAAQ;AAAA,IAAA;AAAA,EACV;AAEJ,GCjBMqC,IAAiB,CACrB;AAAA,EAAEC,MAAM;AAAA,EAAOC,KAAK;AAAM,GAC1B;AAAA,EAAED,MAAM;AAAA,EAAOC,KAAK;AAAM,GAC1B;AAAA,EAAED,MAAM;AAAA,EAAOC,KAAK;AAAM,GAC1B;AAAA,EAAED,MAAM;AAAA,EAAOC,KAAK;AAAM,GAC1B;AAAA,EAAED,MAAM;AAAA,EAAOC,KAAK;AAAM,GAC1B;AAAA,EAAED,MAAM;AAAA,EAAOC,KAAK;AAAM,GAC1B;AAAA,EAAED,MAAM;AAAA,EAAOC,KAAK;AAAM,GAC1B;AAAA,EAAED,MAAM;AAAA,EAAOC,KAAK;AAAM,GAC1B;AAAA,EAAED,MAAM;AAAA,EAAOC,KAAK;AAAM,GAC1B;AAAA,EAAED,MAAM;AAAA,EAAOC,KAAK;AAAM,GAC1B;AAAA,EAAED,MAAM;AAAA,EAAOC,KAAK;AAAM,GAC1B;AAAA,EAAED,MAAM;AAAA,EAAOC,KAAK;AAAM,GAC1B;AAAA,EAAED,MAAM;AAAA,EAAOC,KAAK;AAAM,GAC1B;AAAA,EAAED,MAAM;AAAA,EAAOC,KAAK;AAAM,GAC1B;AAAA,EAAED,MAAM;AAAA,EAAOC,KAAK;AAAM,CAAC;AAGtB,SAAAC,IAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA;AAAA,MAAAC;AAAA,EAAAF,EAAA,CAAA,MAAAG,uBAAAC,IAAA,2BAAA,KAGAF,IAAAN,EAAcd,IAAKuB,CAanB,GAACL,OAAAE,KAAAA,IAAAF,EAAA,CAAA;AAAA,MAAAM;AAAA,SAAAN,EAAA,CAAA,MAAAG,uBAAAC,IAAA,2BAAA,KAdJE,sBAACC,GAAA,EAAQ,IAAArB,EAAMC,SAASC,MAAMC,WAC3Ba,UAAAA;AAAAA,IAAAA;AAAAA,IAeD,gBAAAM,EAACD,GAAA,EAAQ,IAAArB,EAAMC,SAAS/B,QACrBqD,UAAAA,MAAM,CAAC,EAACC,KACD,CAAC,EAAC5B,IACH6B,CAYJ,EAAA,CACL;AAAA,EAAA,GACF,GAAMX,OAAAM,KAAAA,IAAAN,EAAA,CAAA,GAjCNM;AAiCM;AAnCH,SAAAK,EAAA5B,GAAA6B,GAAA;AAAA,SAsBK,gBAAAC,EAACN,KAEK,IAAA;AAAA,IAAAf,SACO;AAAA,IAAMC,YACH;AAAA,IAAQC,KACfoB;AAAAA,EAAAA,GAGP,UAAA;AAAA,IAAA,gBAAAN,EAACO,KAAiB,SAAA,YAAkB,OAAA,GAAW,QAAA,GAAC;AAAA,IAChD,gBAAAP,EAACO,GAAA,EAAgB,OAAA,IAAY,QAAA,EAAA,CAAC;AAAA,EAAA,EAAA,GARzB,YAAYH,CAAC,EASpB;AAAM;AAhCX,SAAAE,EAAAZ,GAAA;AA2Be,QAAA;AAAA,IAAAzD,SAAAA;AAAAA,EAAAA,IAAAyD;AAAW,SAAKzD,EAAQ,GAAG;AAAC;AA3B3C,SAAA4D,EAAAW,GAAAjD,GAAA;AAAA,SAIC,gBAAAyC,EAACO,KAES,SAAA,YACD,OAAA,IACC,QAAA,IACJ,IAAA;AAAA,IAAAxB,UACQ;AAAA,IAAUO,KACfkB,EAAKlB;AAAAA,IAAID,MACRmB,EAAKnB;AAAAA,IAAKoB,WACL;AAAA,EAAA,EACb,qBATuBlD,CAAK,EAS3B;AACD;"}
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,4 +1,4 @@
1
- import { jsx as s, jsxs as M, Fragment as _ } from "react/jsx-runtime";
1
+ import { jsx as m, jsxs as M, Fragment as _ } from "react/jsx-runtime";
2
2
  import { c as g } from "react/compiler-runtime";
3
3
  import { I as w, S as k, P as C, a as R } from "../series-DLNHDWs0.js";
4
4
  import { u as T } from "../use-widget-selector-DFl2hW0R.js";
@@ -15,12 +15,13 @@ import "../cjs-D4KH3azB.js";
15
15
  import "@dnd-kit/core";
16
16
  import "@dnd-kit/sortable";
17
17
  import "@dnd-kit/utilities";
18
+ import "react-dom";
18
19
  import { u as j } from "../use-widget-ref-Ddr_SlJJ.js";
19
20
  import { d as y, a as P } from "../exports-Cr43OCul.js";
20
21
  function v(e) {
21
22
  const t = g(2);
22
23
  let i;
23
- return t[0] !== e ? (i = /* @__PURE__ */ s(w, { ...e, children: "-" }), t[0] = e, t[1] = i) : i = t[1], i;
24
+ return t[0] !== e ? (i = /* @__PURE__ */ m(w, { ...e, children: "-" }), t[0] = e, t[1] = i) : i = t[1], i;
24
25
  }
25
26
  function F(e) {
26
27
  const t = g(15);
@@ -31,29 +32,29 @@ function F(e) {
31
32
  ...r
32
33
  } = e, t[0] = e, t[1] = i, t[2] = r, t[3] = o) : (i = t[1], r = t[2], o = t[3]);
33
34
  const n = o === void 0 ? 0 : o;
34
- let d;
35
- t[4] !== n ? (d = (S) => {
36
- const p = S;
35
+ let s;
36
+ t[4] !== n ? (s = (S) => {
37
+ const x = S;
37
38
  return {
38
- min: p?.data[n]?.min,
39
- color: p?.data[n]?.color,
40
- formatter: p?.formatter
39
+ min: x?.data[n]?.min,
40
+ color: x?.data[n]?.color,
41
+ formatter: x?.formatter
41
42
  };
42
- }, t[4] = n, t[5] = d) : d = t[5];
43
+ }, t[4] = n, t[5] = s) : s = t[5];
43
44
  const {
44
- min: m,
45
+ min: d,
45
46
  color: c,
46
47
  formatter: h
47
- } = T(i, d), u = h ?? $;
48
+ } = T(i, s), u = h ?? $;
48
49
  let a;
49
50
  t[6] !== c ? (a = {
50
51
  color: c
51
52
  }, t[6] = c, t[7] = a) : a = t[7];
52
- const x = m ?? 0;
53
+ const p = d ?? 0;
53
54
  let l;
54
- t[8] !== u || t[9] !== x ? (l = u(x), t[8] = u, t[9] = x, t[10] = l) : l = t[10];
55
+ t[8] !== u || t[9] !== p ? (l = u(p), t[8] = u, t[9] = p, t[10] = l) : l = t[10];
55
56
  let f;
56
- return t[11] !== r || t[12] !== a || t[13] !== l ? (f = /* @__PURE__ */ s(w, { TypographyProps: a, ...r, children: l }), t[11] = r, t[12] = a, t[13] = l, t[14] = f) : f = t[14], f;
57
+ return t[11] !== r || t[12] !== a || t[13] !== l ? (f = /* @__PURE__ */ m(w, { TypographyProps: a, ...r, children: l }), t[11] = r, t[12] = a, t[13] = l, t[14] = f) : f = t[14], f;
57
58
  }
58
59
  function W(e) {
59
60
  const t = g(15);
@@ -64,52 +65,52 @@ function W(e) {
64
65
  ...r
65
66
  } = e, t[0] = e, t[1] = i, t[2] = r, t[3] = o) : (i = t[1], r = t[2], o = t[3]);
66
67
  const n = o === void 0 ? 0 : o;
67
- let d;
68
- t[4] !== n ? (d = (S) => {
69
- const p = S;
68
+ let s;
69
+ t[4] !== n ? (s = (S) => {
70
+ const x = S;
70
71
  return {
71
- max: p?.data[n]?.max,
72
- color: p?.data[n]?.color,
73
- formatter: p?.formatter
72
+ max: x?.data[n]?.max,
73
+ color: x?.data[n]?.color,
74
+ formatter: x?.formatter
74
75
  };
75
- }, t[4] = n, t[5] = d) : d = t[5];
76
+ }, t[4] = n, t[5] = s) : s = t[5];
76
77
  const {
77
- max: m,
78
+ max: d,
78
79
  color: c,
79
80
  formatter: h
80
- } = T(i, d), u = h ?? $;
81
+ } = T(i, s), u = h ?? $;
81
82
  let a;
82
83
  t[6] !== c ? (a = {
83
84
  color: c
84
85
  }, t[6] = c, t[7] = a) : a = t[7];
85
- const x = m ?? 0;
86
+ const p = d ?? 0;
86
87
  let l;
87
- t[8] !== u || t[9] !== x ? (l = u(x), t[8] = u, t[9] = x, t[10] = l) : l = t[10];
88
+ t[8] !== u || t[9] !== p ? (l = u(p), t[8] = u, t[9] = p, t[10] = l) : l = t[10];
88
89
  let f;
89
- return t[11] !== r || t[12] !== a || t[13] !== l ? (f = /* @__PURE__ */ s(w, { TypographyProps: a, ...r, children: l }), t[11] = r, t[12] = a, t[13] = l, t[14] = f) : f = t[14], f;
90
+ return t[11] !== r || t[12] !== a || t[13] !== l ? (f = /* @__PURE__ */ m(w, { TypographyProps: a, ...r, children: l }), t[11] = r, t[12] = a, t[13] = l, t[14] = f) : f = t[14], f;
90
91
  }
91
- function rt(e) {
92
+ function it(e) {
92
93
  const t = g(8), {
93
94
  ref: i
94
95
  } = j(e.id);
95
96
  let r;
96
- t[0] !== e.id ? (r = (d) => {
97
+ t[0] !== e.id ? (r = (s) => {
97
98
  const {
98
- index: m
99
- } = d;
99
+ index: d
100
+ } = s;
100
101
  return /* @__PURE__ */ M(_, { children: [
101
- /* @__PURE__ */ s(k, { id: e.id, index: m }),
102
- /* @__PURE__ */ s(C, { id: e.id, index: m }),
103
- /* @__PURE__ */ s(F, { id: e.id, index: m }),
104
- /* @__PURE__ */ s(v, {}),
105
- /* @__PURE__ */ s(W, { id: e.id, index: m }),
106
- /* @__PURE__ */ s(R, { id: e.id, index: m })
102
+ /* @__PURE__ */ m(k, { id: e.id, index: d }),
103
+ /* @__PURE__ */ m(C, { id: e.id, index: d }),
104
+ /* @__PURE__ */ m(F, { id: e.id, index: d }),
105
+ /* @__PURE__ */ m(v, {}),
106
+ /* @__PURE__ */ m(W, { id: e.id, index: d }),
107
+ /* @__PURE__ */ m(R, { id: e.id, index: d })
107
108
  ] });
108
109
  }, t[0] = e.id, t[1] = r) : r = t[1];
109
110
  let o;
110
- t[2] !== e.id || t[3] !== r ? (o = /* @__PURE__ */ s(b, { id: e.id, children: r }), t[2] = e.id, t[3] = r, t[4] = o) : o = t[4];
111
+ t[2] !== e.id || t[3] !== r ? (o = /* @__PURE__ */ m(b, { id: e.id, children: r }), t[2] = e.id, t[3] = r, t[4] = o) : o = t[4];
111
112
  let n;
112
- return t[5] !== i || t[6] !== o ? (n = /* @__PURE__ */ s(I, { ref: i, children: o }), t[5] = i, t[6] = o, t[7] = n) : n = t[7], n;
113
+ return t[5] !== i || t[6] !== o ? (n = /* @__PURE__ */ m(I, { ref: i, children: o }), t[5] = i, t[6] = o, t[7] = n) : n = t[7], n;
113
114
  }
114
115
  const B = {
115
116
  row: {
@@ -121,12 +122,12 @@ const B = {
121
122
  }
122
123
  }
123
124
  };
124
- function it() {
125
+ function ot() {
125
126
  const e = g(1);
126
127
  let t;
127
- return e[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t = /* @__PURE__ */ s(I, { sx: B.row, "aria-label": "Spread skeleton", children: /* @__PURE__ */ s(V, { width: 120, height: 32 }) }), e[0] = t) : t = e[0], t;
128
+ return e[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t = /* @__PURE__ */ m(I, { sx: B.row, "aria-label": "Spread skeleton", children: /* @__PURE__ */ m(V, { width: 120, height: 32 }) }), e[0] = t) : t = e[0], t;
128
129
  }
129
- function ot({
130
+ function nt({
130
131
  refUI: e
131
132
  }) {
132
133
  return [{
@@ -140,7 +141,7 @@ function ot({
140
141
  }
141
142
  }];
142
143
  }
143
- function nt() {
144
+ function at() {
144
145
  return {
145
146
  series: []
146
147
  };
@@ -153,10 +154,10 @@ export {
153
154
  b as Row,
154
155
  v as Separator,
155
156
  k as Series,
156
- it as SpreadSkeleton,
157
- rt as SpreadUI,
157
+ ot as SpreadSkeleton,
158
+ it as SpreadUI,
158
159
  R as Suffix,
159
- nt as spreadConfig,
160
- ot as spreadDownloadConfig
160
+ at as spreadConfig,
161
+ nt as spreadDownloadConfig
161
162
  };
162
163
  //# sourceMappingURL=spread.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"spread.js","sources":["../../src/widgets/spread/components/separator.tsx","../../src/widgets/spread/components/min-value.tsx","../../src/widgets/spread/components/max-value.tsx","../../src/widgets/spread/spread-ui.tsx","../../src/widgets/spread/style.ts","../../src/widgets/spread/skeleton.tsx","../../src/widgets/spread/config.ts"],"sourcesContent":["import { Item } from '../../formula/components/item'\nimport type { ItemProps } from '../../formula/types'\n\n/**\n * Renders a dash separator between the min and max values in a spread widget.\n */\nexport function Separator(props: Omit<ItemProps, 'children'>) {\n return <Item {...props}>-</Item>\n}\n","import { type SpreadWidgetState, type ValueProps } from '../types'\nimport { useWidgetSelector } from '../../stores/use-widget-selector'\nimport { Item } from '../../formula/components/item'\nimport { defaultFormatter } from '../../utils/formatter'\n\n/**\n * Displays the formatted minimum value for a spread widget data item.\n */\nexport function MinValue({ id, index = 0, ...props }: ValueProps) {\n const {\n min,\n color,\n formatter: _formatter,\n } = useWidgetSelector(id, (w) => {\n const sw = w as SpreadWidgetState | undefined\n return {\n min: sw?.data[index]?.min,\n color: sw?.data[index]?.color,\n formatter: sw?.formatter,\n }\n })\n const formatter = _formatter ?? defaultFormatter\n\n return (\n <Item TypographyProps={{ color }} {...props}>\n {formatter(min ?? 0)}\n </Item>\n )\n}\n","import { type SpreadWidgetState, type ValueProps } from '../types'\nimport { useWidgetSelector } from '../../stores/use-widget-selector'\nimport { Item } from '../../formula/components/item'\nimport { defaultFormatter } from '../../utils/formatter'\n\n/**\n * Displays the formatted maximum value for a spread widget data item.\n */\nexport function MaxValue({ id, index = 0, ...props }: ValueProps) {\n const {\n max,\n color,\n formatter: _formatter,\n } = useWidgetSelector(id, (w) => {\n const sw = w as SpreadWidgetState | undefined\n return {\n max: sw?.data[index]?.max,\n color: sw?.data[index]?.color,\n formatter: sw?.formatter,\n }\n })\n const formatter = _formatter ?? defaultFormatter\n\n return (\n <Item TypographyProps={{ color }} {...props}>\n {formatter(max ?? 0)}\n </Item>\n )\n}\n","import type { SpreadUIProps } from './types'\n\nimport { Separator } from './components/separator'\nimport { MinValue } from './components/min-value'\nimport { MaxValue } from './components/max-value'\nimport { Prefix, Row, Suffix, Series } from '../formula'\nimport { useWidgetRef } from '../../hooks'\nimport { Box } from '@mui/material'\n\n/**\n * Renders a spread widget displaying min-max value pairs with optional prefixes, suffixes, and series indicators.\n */\nexport function SpreadUI(props: SpreadUIProps) {\n const { ref } = useWidgetRef(props.id)\n\n return (\n <Box ref={ref}>\n <Row id={props.id}>\n {({ index }) => (\n <>\n <Series id={props.id} index={index} />\n <Prefix id={props.id} index={index} />\n <MinValue id={props.id} index={index} />\n <Separator />\n <MaxValue id={props.id} index={index} />\n <Suffix id={props.id} index={index} />\n </>\n )}\n </Row>\n </Box>\n )\n}\n","import type { SxProps, Theme } from '@mui/material'\n\nexport const styles = {\n root: {\n display: 'flex',\n flexDirection: 'column',\n gap: (theme: Theme) => theme.spacing(2),\n },\n item: {\n '&[data-disabled=\"true\"]': {\n color: (theme: Theme) => theme.palette.text.disabled,\n },\n },\n row: {\n display: 'flex',\n alignItems: 'center',\n gap: (theme: Theme) => theme.spacing(0.25),\n '& + &': {\n marginTop: (theme: Theme) => theme.spacing(1),\n },\n },\n} satisfies Record<string, SxProps<Theme>>\n","import { Box, Skeleton } from '@mui/material'\nimport { styles } from './style'\n\nexport function SpreadSkeleton() {\n return (\n <Box sx={styles.row} aria-label='Spread skeleton'>\n <Skeleton width={120} height={32} />\n </Box>\n )\n}\n","import { downloadToCSV, downloadToPNG, type DownloadItem } from '../actions'\nimport type { ConfigProps } from '../loader/types'\nimport type { SpreadWidgetConfig, SpreadWidgetData } from './types'\n\n/**\n * Creates download configuration for spread widgets, supporting PNG (screenshot) and CSV (min/max data) exports.\n *\n * @param props - Configuration with `refUI` reference for PNG export.\n * @returns Array of download items for use with the Download action.\n */\nexport function spreadDownloadConfig({\n refUI,\n}: ConfigProps): DownloadItem<SpreadWidgetData>[] {\n return [\n {\n ...downloadToPNG,\n modifier: () => downloadToPNG.modifier(refUI),\n },\n {\n ...downloadToCSV,\n modifier: async (data) => {\n const rows = data.map((item) => [item.min, item.max])\n\n return downloadToCSV.modifier([['Min', 'Max'], ...rows])\n },\n },\n ]\n}\n\n/**\n * Returns the default configuration for spread (min/max value range) widgets.\n *\n * @returns Default spread widget config with empty series.\n */\nexport function spreadConfig(): SpreadWidgetConfig {\n return {\n series: [],\n }\n}\n"],"names":["Separator","props","$","_c","t0","jsx","Item","MinValue","id","t1","index","undefined","t2","w","sw","min","data","color","formatter","_formatter","useWidgetSelector","defaultFormatter","t3","t4","t5","t6","MaxValue","max","SpreadUI","ref","useWidgetRef","jsxs","Fragment","Series","Prefix","Suffix","Row","Box","styles","row","display","alignItems","gap","theme","spacing","marginTop","SpreadSkeleton","Symbol","for","Skeleton","spreadDownloadConfig","refUI","downloadToPNG","modifier","downloadToCSV","rows","map","item","spreadConfig","series"],"mappings":"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"}
1
+ {"version":3,"file":"spread.js","sources":["../../src/widgets/spread/components/separator.tsx","../../src/widgets/spread/components/min-value.tsx","../../src/widgets/spread/components/max-value.tsx","../../src/widgets/spread/spread-ui.tsx","../../src/widgets/spread/style.ts","../../src/widgets/spread/skeleton.tsx","../../src/widgets/spread/config.ts"],"sourcesContent":["import { Item } from '../../formula/components/item'\nimport type { ItemProps } from '../../formula/types'\n\n/**\n * Renders a dash separator between the min and max values in a spread widget.\n */\nexport function Separator(props: Omit<ItemProps, 'children'>) {\n return <Item {...props}>-</Item>\n}\n","import { type SpreadWidgetState, type ValueProps } from '../types'\nimport { useWidgetSelector } from '../../stores/use-widget-selector'\nimport { Item } from '../../formula/components/item'\nimport { defaultFormatter } from '../../utils/formatter'\n\n/**\n * Displays the formatted minimum value for a spread widget data item.\n */\nexport function MinValue({ id, index = 0, ...props }: ValueProps) {\n const {\n min,\n color,\n formatter: _formatter,\n } = useWidgetSelector(id, (w) => {\n const sw = w as SpreadWidgetState | undefined\n return {\n min: sw?.data[index]?.min,\n color: sw?.data[index]?.color,\n formatter: sw?.formatter,\n }\n })\n const formatter = _formatter ?? defaultFormatter\n\n return (\n <Item TypographyProps={{ color }} {...props}>\n {formatter(min ?? 0)}\n </Item>\n )\n}\n","import { type SpreadWidgetState, type ValueProps } from '../types'\nimport { useWidgetSelector } from '../../stores/use-widget-selector'\nimport { Item } from '../../formula/components/item'\nimport { defaultFormatter } from '../../utils/formatter'\n\n/**\n * Displays the formatted maximum value for a spread widget data item.\n */\nexport function MaxValue({ id, index = 0, ...props }: ValueProps) {\n const {\n max,\n color,\n formatter: _formatter,\n } = useWidgetSelector(id, (w) => {\n const sw = w as SpreadWidgetState | undefined\n return {\n max: sw?.data[index]?.max,\n color: sw?.data[index]?.color,\n formatter: sw?.formatter,\n }\n })\n const formatter = _formatter ?? defaultFormatter\n\n return (\n <Item TypographyProps={{ color }} {...props}>\n {formatter(max ?? 0)}\n </Item>\n )\n}\n","import type { SpreadUIProps } from './types'\n\nimport { Separator } from './components/separator'\nimport { MinValue } from './components/min-value'\nimport { MaxValue } from './components/max-value'\nimport { Prefix, Row, Suffix, Series } from '../formula'\nimport { useWidgetRef } from '../../hooks'\nimport { Box } from '@mui/material'\n\n/**\n * Renders a spread widget displaying min-max value pairs with optional prefixes, suffixes, and series indicators.\n */\nexport function SpreadUI(props: SpreadUIProps) {\n const { ref } = useWidgetRef(props.id)\n\n return (\n <Box ref={ref}>\n <Row id={props.id}>\n {({ index }) => (\n <>\n <Series id={props.id} index={index} />\n <Prefix id={props.id} index={index} />\n <MinValue id={props.id} index={index} />\n <Separator />\n <MaxValue id={props.id} index={index} />\n <Suffix id={props.id} index={index} />\n </>\n )}\n </Row>\n </Box>\n )\n}\n","import type { SxProps, Theme } from '@mui/material'\n\nexport const styles = {\n root: {\n display: 'flex',\n flexDirection: 'column',\n gap: (theme: Theme) => theme.spacing(2),\n },\n item: {\n '&[data-disabled=\"true\"]': {\n color: (theme: Theme) => theme.palette.text.disabled,\n },\n },\n row: {\n display: 'flex',\n alignItems: 'center',\n gap: (theme: Theme) => theme.spacing(0.25),\n '& + &': {\n marginTop: (theme: Theme) => theme.spacing(1),\n },\n },\n} satisfies Record<string, SxProps<Theme>>\n","import { Box, Skeleton } from '@mui/material'\nimport { styles } from './style'\n\nexport function SpreadSkeleton() {\n return (\n <Box sx={styles.row} aria-label='Spread skeleton'>\n <Skeleton width={120} height={32} />\n </Box>\n )\n}\n","import { downloadToCSV, downloadToPNG, type DownloadItem } from '../actions'\nimport type { ConfigProps } from '../loader/types'\nimport type { SpreadWidgetConfig, SpreadWidgetData } from './types'\n\n/**\n * Creates download configuration for spread widgets, supporting PNG (screenshot) and CSV (min/max data) exports.\n *\n * @param props - Configuration with `refUI` reference for PNG export.\n * @returns Array of download items for use with the Download action.\n */\nexport function spreadDownloadConfig({\n refUI,\n}: ConfigProps): DownloadItem<SpreadWidgetData>[] {\n return [\n {\n ...downloadToPNG,\n modifier: () => downloadToPNG.modifier(refUI),\n },\n {\n ...downloadToCSV,\n modifier: async (data) => {\n const rows = data.map((item) => [item.min, item.max])\n\n return downloadToCSV.modifier([['Min', 'Max'], ...rows])\n },\n },\n ]\n}\n\n/**\n * Returns the default configuration for spread (min/max value range) widgets.\n *\n * @returns Default spread widget config with empty series.\n */\nexport function spreadConfig(): SpreadWidgetConfig {\n return {\n series: [],\n }\n}\n"],"names":["Separator","props","$","_c","t0","jsx","Item","MinValue","id","t1","index","undefined","t2","w","sw","min","data","color","formatter","_formatter","useWidgetSelector","defaultFormatter","t3","t4","t5","t6","MaxValue","max","SpreadUI","ref","useWidgetRef","jsxs","Fragment","Series","Prefix","Suffix","Row","Box","styles","row","display","alignItems","gap","theme","spacing","marginTop","SpreadSkeleton","Symbol","for","Skeleton","spreadDownloadConfig","refUI","downloadToPNG","modifier","downloadToCSV","rows","map","item","spreadConfig","series"],"mappings":"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"}
@@ -18,6 +18,7 @@ import "../cjs-D4KH3azB.js";
18
18
  import "@dnd-kit/core";
19
19
  import "@dnd-kit/sortable";
20
20
  import "@dnd-kit/utilities";
21
+ import "react-dom";
21
22
  function ge(n) {
22
23
  const e = R(26), {
23
24
  column: t,
@@ -298,7 +299,7 @@ function _e(n) {
298
299
  return e[0] !== n.children || e[1] !== t ? (o = /* @__PURE__ */ P(ie, { ref: t, children: n.children }), e[0] = n.children, e[1] = t, e[2] = o) : o = e[2], o;
299
300
  }
300
301
  const Ce = "local", ve = 0, G = 10, we = [5, 10, 25, 50], V = null, I = "asc";
301
- function Ze({
302
+ function Ve({
302
303
  refUI: n
303
304
  }) {
304
305
  return [{
@@ -320,14 +321,14 @@ function Ze({
320
321
  }
321
322
  }];
322
323
  }
323
- function Ve(n = []) {
324
+ function Ie(n = []) {
324
325
  return {
325
326
  columns: n,
326
327
  selectable: !1,
327
328
  mode: Ce
328
329
  };
329
330
  }
330
- function Ie(n, e) {
331
+ function et(n, e) {
331
332
  const t = R(35);
332
333
  let o;
333
334
  t[0] !== e.length ? (o = (y) => {
@@ -410,7 +411,7 @@ function Ie(n, e) {
410
411
  goToPreviousPage: k
411
412
  }, t[22] = g, t[23] = C, t[24] = w, t[25] = k, t[26] = i, t[27] = v, t[28] = l, t[29] = s, t[30] = r, t[31] = f, t[32] = p, t[33] = c, t[34] = b) : b = t[34], b;
412
413
  }
413
- function et(n, e) {
414
+ function tt(n, e) {
414
415
  const t = R(18), {
415
416
  sortEnabled: o,
416
417
  columnId: l,
@@ -481,7 +482,7 @@ function Te(n) {
481
482
  mode: e?.mode
482
483
  };
483
484
  }
484
- function tt(n, e) {
485
+ function nt(n, e) {
485
486
  const t = R(35);
486
487
  let o;
487
488
  t[0] !== e ? (o = e ?? {}, t[0] = e, t[1] = o) : o = t[1];
@@ -564,7 +565,7 @@ function ke(n) {
564
565
  function Ae(n) {
565
566
  return n?.selected;
566
567
  }
567
- function nt(n) {
568
+ function ot(n) {
568
569
  const e = R(10), {
569
570
  columns: t,
570
571
  rows: o
@@ -611,10 +612,10 @@ function xe(n) {
611
612
  e[t] = void 0;
612
613
  return e;
613
614
  }
614
- function ot(n) {
615
+ function lt(n) {
615
616
  return n?.map(xe);
616
617
  }
617
- const lt = {
618
+ const it = {
618
619
  container: {
619
620
  width: "100%",
620
621
  overflow: "auto"
@@ -652,18 +653,18 @@ export {
652
653
  Z as PaginationActions,
653
654
  Se as Row,
654
655
  D as Table,
655
- nt as TableSkeleton,
656
+ ot as TableSkeleton,
656
657
  me as compareValues,
657
658
  ue as getCellValue,
658
659
  pe as paginateData,
659
- ot as sanitizeTableData,
660
+ lt as sanitizeTableData,
660
661
  xe as sanitizeTableRow,
661
662
  he as sortData,
662
- Ve as tableConfig,
663
- Ze as tableDownloadConfig,
664
- lt as tableStyles,
665
- Ie as usePagination,
666
- tt as useSelection,
667
- et as useSort
663
+ Ie as tableConfig,
664
+ Ve as tableDownloadConfig,
665
+ it as tableStyles,
666
+ et as usePagination,
667
+ nt as useSelection,
668
+ tt as useSort
668
669
  };
669
670
  //# sourceMappingURL=table.js.map