@carto/ps-react-ui 5.0.0-widgets.4 → 5.0.0-widgets.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"category.js","sources":["../../src/widgets/category/style.ts","../../src/widgets/category/components/category-bar.tsx","../../src/widgets/category/components/category-row-single.tsx","../../src/widgets/category/components/category-row-multi.tsx","../../src/widgets/category/components/category-row-other.tsx","../../src/widgets/category/components/category-legend.tsx","../../src/widgets/category/category-ui.tsx","../../src/widgets/category/skeleton.tsx","../../src/widgets/category/config.ts"],"sourcesContent":["import type { SxProps, Theme } from '@mui/material'\n\nexport const styles = {\n root: {\n display: 'flex',\n flexDirection: 'column',\n position: 'relative',\n overflow: 'auto',\n },\n list: {\n display: 'flex',\n flexDirection: 'column',\n gap: (theme: Theme) => theme.spacing(1),\n },\n row: {\n display: 'flex',\n flexDirection: 'column',\n gap: (theme: Theme) => theme.spacing(0.5),\n pointerEvents: 'none',\n },\n rowClickable: {\n pointerEvents: 'auto',\n // display: 'flex',\n // flexDirection: 'column',\n // gap: (theme: Theme) => theme.spacing(0.5),\n // cursor: 'pointer',\n // borderRadius: 1,\n // padding: (theme: Theme) => theme.spacing(0.5),\n // margin: (theme: Theme) => theme.spacing(-0.5),\n // transition: 'background-color 0.15s ease-in-out',\n // '&:hover': {\n // backgroundColor: (theme: Theme) => theme.palette.action.hover,\n // },\n },\n rowHeader: {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n },\n rowLabel: {\n typography: 'body2',\n fontWeight: 'medium',\n color: 'text.primary',\n },\n rowValue: {\n typography: 'body2',\n color: 'text.secondary',\n },\n barContainer: {\n display: 'flex',\n flexDirection: 'column',\n },\n bar: {\n height: 4,\n borderRadius: 2,\n backgroundColor: (theme: Theme) => theme.palette.action.disabledBackground,\n overflow: 'hidden',\n position: 'relative',\n transition: 'background-color 0.15s ease-in-out',\n cursor: 'pointer',\n '&:hover': {\n backgroundColor: (theme: Theme) => theme.palette.action.hover,\n\n '& > div': {\n filter: 'brightness(1.2)',\n },\n },\n },\n barFill: {\n height: '100%',\n borderRadius: 2,\n transition: 'width 0.3s ease-in-out, background-color 0.15s ease-in-out',\n },\n barFillMuted: {\n backgroundColor: (theme: Theme) => theme.palette.action.disabled,\n },\n legend: {\n display: 'flex',\n alignItems: 'center',\n gap: (theme: Theme) => theme.spacing(2),\n flexWrap: 'wrap',\n paddingTop: (theme: Theme) => theme.spacing(2),\n position: 'sticky',\n bottom: 0,\n backgroundColor: 'background.paper',\n borderTop: (theme: Theme) => `1px solid ${theme.palette.divider}`,\n marginTop: (theme: Theme) => theme.spacing(2),\n },\n legendItem: {\n display: 'flex',\n alignItems: 'center',\n gap: (theme: Theme) => theme.spacing(1),\n },\n legendDot: {\n width: 8,\n height: 8,\n borderRadius: '50%',\n },\n legendLabel: {\n typography: 'caption',\n color: 'text.secondary',\n textTransform: 'uppercase',\n fontWeight: 'medium',\n },\n multiBarRow: {\n display: 'flex',\n alignItems: 'center',\n gap: (theme: Theme) => theme.spacing(1),\n },\n multiBarValue: {\n typography: 'body2',\n color: 'text.secondary',\n minWidth: 48,\n textAlign: 'right',\n },\n multiBarContainer: {\n flex: 1,\n },\n otherRow: {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n },\n otherLabel: {\n typography: 'body2',\n fontWeight: 'medium',\n color: 'text.secondary',\n fontStyle: 'italic',\n },\n otherCount: {\n typography: 'body2',\n color: 'text.disabled',\n },\n} satisfies Record<string, SxProps<Theme>>\n","import { Box } from '@mui/material'\nimport { styles } from '../style'\n\nexport interface CategoryBarProps {\n value: number\n maxValue: number\n color: string\n selected?: boolean\n}\n\nexport function CategoryBar({\n value,\n maxValue,\n color,\n selected = true,\n}: CategoryBarProps) {\n const percentage = maxValue > 0 ? (value / maxValue) * 100 : 0\n\n const barFillSx = selected\n ? { ...styles.barFill, width: `${percentage}%`, backgroundColor: color }\n : { ...styles.barFill, ...styles.barFillMuted, width: `${percentage}%` }\n\n return (\n <Box sx={styles.bar}>\n <Box sx={barFillSx} />\n </Box>\n )\n}\n","import { Box, Typography } from '@mui/material'\nimport { styles } from '../style'\nimport { CategoryBar } from './category-bar'\nimport type { CategoryWidgetConfig } from '../types'\n\nexport interface CategoryRowSingleProps {\n name: string\n value: number\n maxValue: number\n color: string\n formatter: NonNullable<CategoryWidgetConfig['formatter']>\n onClick?: CategoryWidgetConfig['onRowClick']\n selected?: boolean\n}\n\nexport function CategoryRowSingle({\n name,\n value,\n maxValue,\n color,\n formatter,\n onClick,\n selected = true,\n}: CategoryRowSingleProps) {\n const handleClick = onClick\n ? () =>\n onClick({\n name,\n })\n : undefined\n const rowStyle = onClick ? styles.rowClickable : styles.row\n\n return (\n <Box sx={rowStyle} onClick={handleClick}>\n <Box sx={styles.rowHeader}>\n <Typography sx={styles.rowLabel}>{name}</Typography>\n <Typography sx={styles.rowValue}>{formatter(value)}</Typography>\n </Box>\n <CategoryBar\n value={value}\n maxValue={maxValue}\n color={color}\n selected={selected}\n />\n </Box>\n )\n}\n","import { Box, Typography } from '@mui/material'\nimport { styles } from '../style'\nimport { CategoryBar } from './category-bar'\nimport type { CategoryWidgetConfig } from '../types'\n\nexport interface CategoryRowMultiProps {\n name: string\n values: number[]\n maxValue: number\n colors: string[]\n formatter: NonNullable<CategoryWidgetConfig['formatter']>\n onClick?: CategoryWidgetConfig['onRowClick']\n selected?: boolean\n}\n\nexport function CategoryRowMulti({\n name,\n values,\n maxValue,\n colors,\n formatter,\n onClick,\n selected = true,\n}: CategoryRowMultiProps) {\n const handleClick = onClick ? () => onClick({ name }) : undefined\n const rowStyle = onClick ? styles.rowClickable : styles.row\n\n return (\n <Box sx={rowStyle} onClick={handleClick}>\n <Typography sx={styles.rowLabel}>{name}</Typography>\n <Box sx={styles.barContainer}>\n {values.map((value, index) => (\n <Box key={`${name}-${value}-${index}`} sx={styles.multiBarRow}>\n <Box sx={styles.multiBarContainer}>\n <CategoryBar\n value={value}\n maxValue={maxValue}\n color={colors[index % colors.length] ?? ''}\n selected={selected}\n />\n </Box>\n <Typography sx={styles.multiBarValue}>\n {formatter(value)}\n </Typography>\n </Box>\n ))}\n </Box>\n </Box>\n )\n}\n","import { Box, Typography } from '@mui/material'\nimport { styles } from '../style'\n\nexport interface CategoryRowOtherProps {\n hiddenCount: number\n otherLabel?: string\n otherCountLabel?: string\n}\n\nexport function CategoryRowOther({\n hiddenCount,\n otherLabel = 'Other',\n otherCountLabel = '{count} more',\n}: CategoryRowOtherProps) {\n const countText = otherCountLabel.replace('{count}', String(hiddenCount))\n\n return (\n <Box sx={styles.otherRow}>\n <Typography sx={styles.otherLabel}>{otherLabel}</Typography>\n <Typography sx={styles.otherCount}>({countText})</Typography>\n </Box>\n )\n}\n","import { Box, Typography } from '@mui/material'\nimport { styles } from '../style'\nimport type { CategorySeriesConfig } from '../types'\n\nexport interface CategoryLegendProps {\n series: CategorySeriesConfig[]\n colors: string[]\n}\n\nexport function CategoryLegend({ series, colors }: CategoryLegendProps) {\n if (series.length === 0) {\n return null\n }\n\n return (\n <Box sx={styles.legend}>\n {series.map((item, index) => (\n <Box key={item.name} sx={styles.legendItem}>\n <Box\n sx={{\n ...styles.legendDot,\n backgroundColor: item.color ?? colors[index % colors.length],\n }}\n />\n <Typography sx={styles.legendLabel}>{item.name}</Typography>\n </Box>\n ))}\n </Box>\n )\n}\n","import { Box, useTheme } from '@mui/material'\nimport { useMemo } from 'react'\nimport { useWidgetStore } from '../stores/widget-store'\nimport { styles } from './style'\nimport type { CategoryUIProps, CategoryWidgetState } from './types'\nimport {\n CategoryRowSingle,\n CategoryRowMulti,\n CategoryRowOther,\n CategoryLegend,\n} from './components'\nimport { useShallow } from 'zustand/shallow'\n\nconst defaultFormatter = (value: number) => value.toString()\n\ninterface GroupedCategoryItem {\n name: string\n values: number[]\n}\n\nexport function CategoryUI({ id }: CategoryUIProps) {\n const theme = useTheme()\n const widget = useWidgetStore(\n useShallow((state) => {\n const widget = state.getWidget<CategoryWidgetState>(id)\n return {\n formatter: widget?.formatter,\n series: widget?.series,\n data: widget?.data,\n maxItems: widget?.maxItems,\n labels: widget?.labels,\n onRowClick: widget?.onRowClick,\n selected: widget?.selected,\n }\n }),\n )\n\n const formatter = widget?.formatter ?? defaultFormatter\n const series = useMemo(() => widget?.series ?? [], [widget?.series])\n const data = widget?.data\n const maxItems = widget?.maxItems\n const labels = widget?.labels\n const onRowClick = widget?.onRowClick\n const selected = widget?.selected\n\n const qualitativeColors = useMemo(\n () => Object.values(theme.palette.qualitative.bold),\n [theme.palette.qualitative.bold],\n )\n\n const colors = useMemo((): string[] => {\n if (series.length > 0) {\n return series.map(\n (s, index: number) =>\n s.color ??\n qualitativeColors[index % qualitativeColors.length] ??\n theme.palette.primary.main,\n )\n }\n return [theme.palette.primary.main]\n }, [series, theme.palette.primary.main, qualitativeColors])\n\n // Group data items by name to support multi-series display\n // data is CategoryDataItem[][] where data[seriesIndex] contains items for that series\n const groupedData = useMemo((): GroupedCategoryItem[] => {\n if (!data || data.length === 0) return []\n\n const seriesCount = Math.max(data.length, 1)\n const grouped = new Map<string, number[]>()\n const nameOrder: string[] = []\n\n // Iterate over each series (outer array)\n for (let seriesIndex = 0; seriesIndex < data.length; seriesIndex++) {\n const seriesData = data[seriesIndex]!\n for (const item of seriesData) {\n let values = grouped.get(item.name)\n if (!values) {\n values = new Array<number>(seriesCount).fill(0)\n grouped.set(item.name, values)\n nameOrder.push(item.name)\n }\n values[seriesIndex] = item.value\n }\n }\n\n return nameOrder.map((name) => ({\n name,\n values: grouped.get(name)!,\n }))\n }, [data])\n\n const maxValue = useMemo(() => {\n if (groupedData.length === 0) return 0\n return Math.max(...groupedData.flatMap((item) => item.values))\n }, [groupedData])\n\n // Slice data to maxItems and compute hidden count\n const visibleData = useMemo(() => {\n if (maxItems === undefined) {\n return groupedData\n }\n const limit = Math.max(0, maxItems)\n if (limit >= groupedData.length) {\n return groupedData\n }\n return groupedData.slice(0, limit)\n }, [groupedData, maxItems])\n\n const hiddenCount = groupedData.length - visibleData.length\n\n if (groupedData.length === 0) {\n return null\n }\n\n const isMulti = series.length > 1\n\n return (\n <Box sx={styles.root}>\n <Box sx={styles.list}>\n {isMulti\n ? visibleData.map((item) => (\n <CategoryRowMulti\n key={item.name}\n name={item.name}\n values={item.values}\n maxValue={maxValue}\n colors={colors}\n formatter={formatter}\n onClick={onRowClick}\n selected={selected?.(item.name) ?? true}\n />\n ))\n : visibleData.map((item) => (\n <CategoryRowSingle\n key={item.name}\n name={item.name}\n value={item.values[0] ?? 0}\n selected={selected?.(item.name) ?? true}\n maxValue={maxValue}\n color={colors[0] ?? theme.palette.primary.main}\n formatter={formatter}\n onClick={onRowClick}\n />\n ))}\n {hiddenCount > 0 && (\n <CategoryRowOther\n hiddenCount={hiddenCount}\n otherLabel={labels?.other}\n otherCountLabel={labels?.otherCount}\n />\n )}\n </Box>\n {series.length > 0 && <CategoryLegend series={series} colors={colors} />}\n </Box>\n )\n}\n","import { Box, Skeleton } from '@mui/material'\nimport { styles } from './style'\n\nconst widthPatterns = [85, 70, 55, 75, 60]\n\nexport function CategorySkeleton() {\n return (\n <Box sx={styles.list} aria-label='Category skeleton'>\n {Array.from({ length: 5 }).map((_, index) => (\n <Box key={index} sx={styles.row}>\n <Box sx={styles.rowHeader}>\n <Skeleton width={80} height={16} />\n <Skeleton width={40} height={16} />\n </Box>\n <Skeleton\n variant='rectangular'\n height={4}\n sx={{ borderRadius: 2, width: `${widthPatterns[index]}%` }}\n />\n </Box>\n ))}\n </Box>\n )\n}\n","import { downloadToCSV, downloadToPNG, type DownloadItem } from '../actions'\nimport type { ConfigProps } from '../root/types'\nimport type {\n CategoryWidgetConfig,\n CategoryWidgetData,\n CategorySeriesConfig,\n CategoryLabels,\n} from './types'\n\nexport interface CategoryDownloadConfigProps extends ConfigProps {\n series?: CategorySeriesConfig[]\n}\n\nexport interface CategoryConfigProps {\n data?: CategoryWidgetData\n series?: CategorySeriesConfig[]\n formatter?: (value: number) => string\n maxItems?: number\n labels?: CategoryLabels\n}\n\nexport function categoryDownloadConfig({\n refUI,\n series,\n}: CategoryDownloadConfigProps): DownloadItem<CategoryWidgetData>[] {\n return [\n {\n ...downloadToPNG,\n modifier: () => downloadToPNG.modifier(refUI),\n },\n {\n ...downloadToCSV,\n modifier: async (data) => {\n if (!data?.length || data[0]?.length === 0) {\n return downloadToCSV.modifier([])\n }\n\n // data is CategoryDataItem[][] where data[seriesIndex] contains items for that series\n const seriesCount = data.length\n const grouped = new Map<string, number[]>()\n const nameOrder: string[] = []\n\n // Iterate over each series (outer array)\n for (let seriesIndex = 0; seriesIndex < seriesCount; seriesIndex++) {\n const seriesData = data[seriesIndex]!\n for (const item of seriesData) {\n let values = grouped.get(item.name)\n if (!values) {\n values = new Array<number>(seriesCount).fill(0)\n grouped.set(item.name, values)\n nameOrder.push(item.name)\n }\n values[seriesIndex] = item.value\n }\n }\n\n // Build rows\n const rows = nameOrder.map((name) => [name, ...grouped.get(name)!])\n\n const isMulti = seriesCount > 1\n const headers = isMulti\n ? [\n 'Category',\n ...(series?.map((s: CategorySeriesConfig) => s.name) ??\n Array.from(\n { length: seriesCount },\n (_, i) => `Series ${i + 1}`,\n )),\n ]\n : ['Category', 'Value']\n\n return downloadToCSV.modifier([headers, ...rows])\n },\n },\n ]\n}\n\nexport function categoryConfig(): CategoryWidgetConfig {\n return {\n series: [],\n maxItems: undefined,\n }\n}\n"],"names":["styles","root","display","flexDirection","position","overflow","list","gap","theme","spacing","row","pointerEvents","rowClickable","rowHeader","justifyContent","alignItems","rowLabel","typography","fontWeight","color","rowValue","barContainer","bar","height","borderRadius","backgroundColor","palette","action","disabledBackground","transition","cursor","hover","filter","barFill","barFillMuted","disabled","legend","flexWrap","paddingTop","bottom","borderTop","divider","marginTop","legendItem","legendDot","width","legendLabel","textTransform","multiBarRow","multiBarValue","minWidth","textAlign","multiBarContainer","flex","otherRow","otherLabel","fontStyle","otherCount","CategoryBar","t0","$","_c","value","maxValue","selected","t1","undefined","percentage","t2","barFillSx","t3","jsx","Box","CategoryRowSingle","name","formatter","onClick","handleClick","rowStyle","Typography","t4","t5","t6","t7","t8","jsxs","CategoryRowMulti","values","colors","index","length","map","CategoryRowOther","hiddenCount","otherCountLabel","replace","String","countText","CategoryLegend","series","item","defaultFormatter","toString","CategoryUI","id","useTheme","state","widget","getWidget","data","maxItems","labels","onRowClick","widget_0","useWidgetStore","useShallow","qualitative","bold","Object","qualitativeColors","bb0","primary","main","s","bb1","Symbol","for","seriesCount","Math","max","grouped","Map","nameOrder","seriesIndex","seriesData","get","Array","fill","set","push","groupedData","bb2","flatMap","_temp","bb3","limit","slice","visibleData","isMulti","item_1","item_2","t9","other","t10","t11","t12","item_0","widthPatterns","CategorySkeleton","from","_","Skeleton","categoryDownloadConfig","refUI","downloadToPNG","modifier","downloadToCSV","rows","headers","i","categoryConfig"],"mappings":"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"}
1
+ {"version":3,"file":"category.js","sources":["../../src/widgets/category/style.ts","../../src/widgets/category/components/category-bar.tsx","../../src/widgets/category/components/category-row-single.tsx","../../src/widgets/category/components/category-row-multi.tsx","../../src/widgets/category/components/category-row-other.tsx","../../src/widgets/category/components/category-legend.tsx","../../src/widgets/category/category-ui.tsx","../../src/widgets/category/skeleton.tsx","../../src/widgets/category/config.ts"],"sourcesContent":["import type { SxProps, Theme } from '@mui/material'\n\nexport const styles = {\n root: {\n display: 'flex',\n flexDirection: 'column',\n position: 'relative',\n overflow: 'auto',\n },\n list: {\n display: 'flex',\n flexDirection: 'column',\n gap: (theme: Theme) => theme.spacing(1),\n },\n row: {\n display: 'flex',\n flexDirection: 'column',\n gap: (theme: Theme) => theme.spacing(0.5),\n pointerEvents: 'none',\n },\n rowClickable: {\n pointerEvents: 'auto',\n // display: 'flex',\n // flexDirection: 'column',\n // gap: (theme: Theme) => theme.spacing(0.5),\n // cursor: 'pointer',\n // borderRadius: 1,\n // padding: (theme: Theme) => theme.spacing(0.5),\n // margin: (theme: Theme) => theme.spacing(-0.5),\n // transition: 'background-color 0.15s ease-in-out',\n // '&:hover': {\n // backgroundColor: (theme: Theme) => theme.palette.action.hover,\n // },\n },\n rowHeader: {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n },\n rowLabel: {\n typography: 'body2',\n fontWeight: 'medium',\n color: 'text.primary',\n },\n rowValue: {\n typography: 'body2',\n color: 'text.secondary',\n },\n barContainer: {\n display: 'flex',\n flexDirection: 'column',\n },\n bar: {\n height: 4,\n borderRadius: 2,\n backgroundColor: (theme: Theme) => theme.palette.action.disabledBackground,\n overflow: 'hidden',\n position: 'relative',\n transition: 'background-color 0.15s ease-in-out',\n cursor: 'pointer',\n '&:hover': {\n backgroundColor: (theme: Theme) => theme.palette.action.hover,\n\n '& > div': {\n filter: 'brightness(1.2)',\n },\n },\n },\n barFill: {\n height: '100%',\n borderRadius: 2,\n transition: 'width 0.3s ease-in-out, background-color 0.15s ease-in-out',\n },\n barFillMuted: {\n backgroundColor: (theme: Theme) => theme.palette.action.disabled,\n },\n legend: {\n display: 'flex',\n alignItems: 'center',\n gap: (theme: Theme) => theme.spacing(2),\n flexWrap: 'wrap',\n paddingTop: (theme: Theme) => theme.spacing(2),\n position: 'sticky',\n bottom: 0,\n backgroundColor: 'background.paper',\n borderTop: (theme: Theme) => `1px solid ${theme.palette.divider}`,\n marginTop: (theme: Theme) => theme.spacing(2),\n },\n legendItem: {\n display: 'flex',\n alignItems: 'center',\n gap: (theme: Theme) => theme.spacing(1),\n },\n legendDot: {\n width: 8,\n height: 8,\n borderRadius: '50%',\n },\n legendLabel: {\n typography: 'caption',\n color: 'text.secondary',\n textTransform: 'uppercase',\n fontWeight: 'medium',\n },\n multiBarRow: {\n display: 'flex',\n alignItems: 'center',\n gap: (theme: Theme) => theme.spacing(1),\n },\n multiBarValue: {\n typography: 'body2',\n color: 'text.secondary',\n minWidth: 48,\n textAlign: 'right',\n },\n multiBarContainer: {\n flex: 1,\n },\n otherRow: {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n },\n otherLabel: {\n typography: 'body2',\n fontWeight: 'medium',\n color: 'text.secondary',\n fontStyle: 'italic',\n },\n otherCount: {\n typography: 'body2',\n color: 'text.disabled',\n },\n} satisfies Record<string, SxProps<Theme>>\n","import { Box } from '@mui/material'\nimport { styles } from '../style'\n\nexport interface CategoryBarProps {\n value: number\n maxValue: number\n color: string\n selected?: boolean\n}\n\nexport function CategoryBar({\n value,\n maxValue,\n color,\n selected = true,\n}: CategoryBarProps) {\n const percentage = maxValue > 0 ? (value / maxValue) * 100 : 0\n\n const barFillSx = selected\n ? { ...styles.barFill, width: `${percentage}%`, backgroundColor: color }\n : { ...styles.barFill, ...styles.barFillMuted, width: `${percentage}%` }\n\n return (\n <Box sx={styles.bar}>\n <Box sx={barFillSx} />\n </Box>\n )\n}\n","import { Box, Typography } from '@mui/material'\nimport { styles } from '../style'\nimport { CategoryBar } from './category-bar'\nimport type { CategoryWidgetConfig } from '../types'\n\nexport interface CategoryRowSingleProps {\n name: string\n value: number\n maxValue: number\n color: string\n formatter: NonNullable<CategoryWidgetConfig['formatter']>\n onClick?: CategoryWidgetConfig['onRowClick']\n selected?: boolean\n}\n\nexport function CategoryRowSingle({\n name,\n value,\n maxValue,\n color,\n formatter,\n onClick,\n selected = true,\n}: CategoryRowSingleProps) {\n const handleClick = onClick\n ? () =>\n onClick({\n name,\n })\n : undefined\n const rowStyle = onClick ? styles.rowClickable : styles.row\n\n return (\n <Box sx={rowStyle} onClick={handleClick}>\n <Box sx={styles.rowHeader}>\n <Typography sx={styles.rowLabel}>{name}</Typography>\n <Typography sx={styles.rowValue}>{formatter(value)}</Typography>\n </Box>\n <CategoryBar\n value={value}\n maxValue={maxValue}\n color={color}\n selected={selected}\n />\n </Box>\n )\n}\n","import { Box, Typography } from '@mui/material'\nimport { styles } from '../style'\nimport { CategoryBar } from './category-bar'\nimport type { CategoryWidgetConfig } from '../types'\n\nexport interface CategoryRowMultiProps {\n name: string\n values: number[]\n maxValue: number\n colors: string[]\n formatter: NonNullable<CategoryWidgetConfig['formatter']>\n onClick?: CategoryWidgetConfig['onRowClick']\n selected?: boolean\n}\n\nexport function CategoryRowMulti({\n name,\n values,\n maxValue,\n colors,\n formatter,\n onClick,\n selected = true,\n}: CategoryRowMultiProps) {\n const handleClick = onClick ? () => onClick({ name }) : undefined\n const rowStyle = onClick ? styles.rowClickable : styles.row\n\n return (\n <Box sx={rowStyle} onClick={handleClick}>\n <Typography sx={styles.rowLabel}>{name}</Typography>\n <Box sx={styles.barContainer}>\n {values.map((value, index) => (\n <Box key={`${name}-${value}-${index}`} sx={styles.multiBarRow}>\n <Box sx={styles.multiBarContainer}>\n <CategoryBar\n value={value}\n maxValue={maxValue}\n color={colors[index % colors.length] ?? ''}\n selected={selected}\n />\n </Box>\n <Typography sx={styles.multiBarValue}>\n {formatter(value)}\n </Typography>\n </Box>\n ))}\n </Box>\n </Box>\n )\n}\n","import { Box, Typography } from '@mui/material'\nimport { styles } from '../style'\n\nexport interface CategoryRowOtherProps {\n hiddenCount: number\n otherLabel?: string\n otherCountLabel?: string\n}\n\nexport function CategoryRowOther({\n hiddenCount,\n otherLabel = 'Other',\n otherCountLabel = '{count} more',\n}: CategoryRowOtherProps) {\n const countText = otherCountLabel.replace('{count}', String(hiddenCount))\n\n return (\n <Box sx={styles.otherRow}>\n <Typography sx={styles.otherLabel}>{otherLabel}</Typography>\n <Typography sx={styles.otherCount}>({countText})</Typography>\n </Box>\n )\n}\n","import { Box, Typography } from '@mui/material'\nimport { styles } from '../style'\nimport type { CategorySeriesConfig } from '../types'\n\nexport interface CategoryLegendProps {\n series: CategorySeriesConfig[]\n colors: string[]\n}\n\nexport function CategoryLegend({ series, colors }: CategoryLegendProps) {\n if (series.length === 0) {\n return null\n }\n\n return (\n <Box sx={styles.legend}>\n {series.map((item, index) => (\n <Box key={item.name} sx={styles.legendItem}>\n <Box\n sx={{\n ...styles.legendDot,\n backgroundColor: item.color ?? colors[index % colors.length],\n }}\n />\n <Typography sx={styles.legendLabel}>{item.name}</Typography>\n </Box>\n ))}\n </Box>\n )\n}\n","import { Box, useTheme } from '@mui/material'\nimport { useMemo } from 'react'\nimport { useWidgetStore } from '../stores/widget-store'\nimport { styles } from './style'\nimport type { CategoryUIProps, CategoryWidgetState } from './types'\nimport {\n CategoryRowSingle,\n CategoryRowMulti,\n CategoryRowOther,\n CategoryLegend,\n} from './components'\nimport { useShallow } from 'zustand/shallow'\n\nconst defaultFormatter = (value: number) => value.toString()\n\ninterface GroupedCategoryItem {\n name: string\n values: number[]\n}\n\nexport function CategoryUI({ id }: CategoryUIProps) {\n const theme = useTheme()\n const widget = useWidgetStore(\n useShallow((state) => {\n const widget = state.getWidget<CategoryWidgetState>(id)\n return {\n formatter: widget?.formatter,\n series: widget?.series,\n data: widget?.data,\n maxItems: widget?.maxItems,\n labels: widget?.labels,\n onRowClick: widget?.onRowClick,\n selected: widget?.selected,\n }\n }),\n )\n\n const formatter = widget?.formatter ?? defaultFormatter\n const series = useMemo(() => widget?.series ?? [], [widget?.series])\n const data = widget?.data\n const maxItems = widget?.maxItems\n const labels = widget?.labels\n const onRowClick = widget?.onRowClick\n const selected = widget?.selected\n\n const qualitativeColors = useMemo(\n () => Object.values(theme.palette.qualitative.bold),\n [theme.palette.qualitative.bold],\n )\n\n const colors = useMemo((): string[] => {\n if (series.length > 0) {\n return series.map(\n (s, index: number) =>\n s.color ??\n qualitativeColors[index % qualitativeColors.length] ??\n theme.palette.primary.main,\n )\n }\n return [theme.palette.primary.main]\n }, [series, theme.palette.primary.main, qualitativeColors])\n\n // Group data items by name to support multi-series display\n // data is CategoryDataItem[][] where data[seriesIndex] contains items for that series\n const groupedData = useMemo((): GroupedCategoryItem[] => {\n if (!data || data.length === 0) return []\n\n const seriesCount = Math.max(data.length, 1)\n const grouped = new Map<string, number[]>()\n const nameOrder: string[] = []\n\n // Iterate over each series (outer array)\n for (let seriesIndex = 0; seriesIndex < data.length; seriesIndex++) {\n const seriesData = data[seriesIndex]!\n for (const item of seriesData) {\n let values = grouped.get(item.name)\n if (!values) {\n values = new Array<number>(seriesCount).fill(0)\n grouped.set(item.name, values)\n nameOrder.push(item.name)\n }\n values[seriesIndex] = item.value\n }\n }\n\n return nameOrder.map((name) => ({\n name,\n values: grouped.get(name)!,\n }))\n }, [data])\n\n const maxValue = useMemo(() => {\n if (groupedData.length === 0) return 0\n return Math.max(...groupedData.flatMap((item) => item.values))\n }, [groupedData])\n\n // Slice data to maxItems and compute hidden count\n const visibleData = useMemo(() => {\n if (maxItems === undefined) {\n return groupedData\n }\n const limit = Math.max(0, maxItems)\n if (limit >= groupedData.length) {\n return groupedData\n }\n return groupedData.slice(0, limit)\n }, [groupedData, maxItems])\n\n const hiddenCount = groupedData.length - visibleData.length\n\n if (groupedData.length === 0) {\n return null\n }\n\n const isMulti = series.length > 1\n\n return (\n <Box sx={styles.root}>\n <Box sx={styles.list}>\n {isMulti\n ? visibleData.map((item) => (\n <CategoryRowMulti\n key={item.name}\n name={item.name}\n values={item.values}\n maxValue={maxValue}\n colors={colors}\n formatter={formatter}\n onClick={onRowClick}\n selected={selected?.(item.name) ?? true}\n />\n ))\n : visibleData.map((item) => (\n <CategoryRowSingle\n key={item.name}\n name={item.name}\n value={item.values[0] ?? 0}\n selected={selected?.(item.name) ?? true}\n maxValue={maxValue}\n color={colors[0] ?? theme.palette.primary.main}\n formatter={formatter}\n onClick={onRowClick}\n />\n ))}\n {hiddenCount > 0 && (\n <CategoryRowOther\n hiddenCount={hiddenCount}\n otherLabel={labels?.other}\n otherCountLabel={labels?.otherCount}\n />\n )}\n </Box>\n {series.length > 0 && <CategoryLegend series={series} colors={colors} />}\n </Box>\n )\n}\n","import { Box, Skeleton } from '@mui/material'\nimport { styles } from './style'\n\nconst widthPatterns = [85, 70, 55, 75, 60]\n\nexport function CategorySkeleton() {\n return (\n <Box sx={styles.list} aria-label='Category skeleton'>\n {Array.from({ length: 5 }).map((_, index) => (\n <Box key={index} sx={styles.row}>\n <Box sx={styles.rowHeader}>\n <Skeleton width={80} height={16} />\n <Skeleton width={40} height={16} />\n </Box>\n <Skeleton\n variant='rectangular'\n height={4}\n sx={{ borderRadius: 2, width: `${widthPatterns[index]}%` }}\n />\n </Box>\n ))}\n </Box>\n )\n}\n","import { downloadToCSV, downloadToPNG, type DownloadItem } from '../actions'\nimport type { ConfigProps } from '../root/types'\nimport type {\n CategoryWidgetConfig,\n CategoryWidgetData,\n CategorySeriesConfig,\n CategoryLabels,\n} from './types'\n\nexport interface CategoryDownloadConfigProps extends ConfigProps {\n series?: CategorySeriesConfig[]\n}\n\nexport interface CategoryConfigProps {\n data?: CategoryWidgetData\n series?: CategorySeriesConfig[]\n formatter?: (value: number) => string\n maxItems?: number\n labels?: CategoryLabels\n}\n\nexport function categoryDownloadConfig({\n refUI,\n series,\n}: CategoryDownloadConfigProps): DownloadItem<CategoryWidgetData>[] {\n return [\n {\n ...downloadToPNG,\n modifier: () => downloadToPNG.modifier(refUI),\n },\n {\n ...downloadToCSV,\n modifier: async (data) => {\n if (!data?.length || data[0]?.length === 0) {\n return downloadToCSV.modifier([])\n }\n\n // data is CategoryDataItem[][] where data[seriesIndex] contains items for that series\n const seriesCount = data.length\n const grouped = new Map<string, number[]>()\n const nameOrder: string[] = []\n\n // Iterate over each series (outer array)\n for (let seriesIndex = 0; seriesIndex < seriesCount; seriesIndex++) {\n const seriesData = data[seriesIndex]!\n for (const item of seriesData) {\n let values = grouped.get(item.name)\n if (!values) {\n values = new Array<number>(seriesCount).fill(0)\n grouped.set(item.name, values)\n nameOrder.push(item.name)\n }\n values[seriesIndex] = item.value\n }\n }\n\n // Build rows\n const rows = nameOrder.map((name) => [name, ...grouped.get(name)!])\n\n const isMulti = seriesCount > 1\n const headers = isMulti\n ? [\n 'Category',\n ...(series?.map((s: CategorySeriesConfig) => s.name) ??\n Array.from(\n { length: seriesCount },\n (_, i) => `Series ${i + 1}`,\n )),\n ]\n : ['Category', 'Value']\n\n return downloadToCSV.modifier([headers, ...rows])\n },\n },\n ]\n}\n\nexport function categoryConfig(): CategoryWidgetConfig {\n return {\n series: [],\n maxItems: undefined,\n }\n}\n"],"names":["styles","root","display","flexDirection","position","overflow","list","gap","theme","spacing","row","pointerEvents","rowClickable","rowHeader","justifyContent","alignItems","rowLabel","typography","fontWeight","color","rowValue","barContainer","bar","height","borderRadius","backgroundColor","palette","action","disabledBackground","transition","cursor","hover","filter","barFill","barFillMuted","disabled","legend","flexWrap","paddingTop","bottom","borderTop","divider","marginTop","legendItem","legendDot","width","legendLabel","textTransform","multiBarRow","multiBarValue","minWidth","textAlign","multiBarContainer","flex","otherRow","otherLabel","fontStyle","otherCount","CategoryBar","t0","$","_c","value","maxValue","selected","t1","undefined","percentage","t2","barFillSx","t3","jsx","Box","CategoryRowSingle","name","formatter","onClick","handleClick","rowStyle","Typography","t4","t5","t6","t7","t8","jsxs","CategoryRowMulti","values","colors","index","length","map","CategoryRowOther","hiddenCount","otherCountLabel","replace","String","countText","CategoryLegend","series","item","defaultFormatter","toString","CategoryUI","id","useTheme","state","widget","getWidget","data","maxItems","labels","onRowClick","widget_0","useWidgetStore","useShallow","qualitative","bold","Object","qualitativeColors","bb0","primary","main","s","bb1","Symbol","for","seriesCount","Math","max","grouped","Map","nameOrder","seriesIndex","seriesData","get","Array","fill","set","push","groupedData","bb2","flatMap","_temp","bb3","limit","slice","visibleData","isMulti","item_1","item_2","t9","other","t10","t11","t12","item_0","widthPatterns","CategorySkeleton","from","_","Skeleton","categoryDownloadConfig","refUI","downloadToPNG","modifier","downloadToCSV","rows","headers","i","categoryConfig"],"mappings":"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"}
@@ -4,9 +4,10 @@ import { c as S } from "react/compiler-runtime";
4
4
  import { u as y } from "../widget-store-DNyVElxd.js";
5
5
  import { useShallow as R } from "zustand/shallow";
6
6
  import { R as T, s as _ } from "../row-C_m1ovHv.js";
7
- import { Box as I, Skeleton as $ } from "@mui/material";
7
+ import { Box as p, Skeleton as $ } from "@mui/material";
8
8
  import "@mui/icons-material";
9
9
  import { useRef as b, useEffect as j } from "react";
10
+ import "react-markdown";
10
11
  import { d as v, a as w } from "../exports-Cr43OCul.js";
11
12
  import "../lasso-tool-CYn3ivf-.js";
12
13
  import "../cjs-D9ro6BXv.js";
@@ -24,8 +25,8 @@ function U(e) {
24
25
  } = e, t[0] = e, t[1] = o, t[2] = i, t[3] = n) : (o = t[1], i = t[2], n = t[3]);
25
26
  const f = n === void 0 ? 0 : n;
26
27
  let r;
27
- t[4] !== o || t[5] !== f ? (r = (p) => {
28
- const h = p.getWidget(o);
28
+ t[4] !== o || t[5] !== f ? (r = (I) => {
29
+ const h = I.getWidget(o);
29
30
  return {
30
31
  value: h?.data?.[f]?.value,
31
32
  color: h?.data?.[f]?.color,
@@ -47,7 +48,7 @@ function U(e) {
47
48
  let c;
48
49
  return t[12] !== i || t[13] !== s || t[14] !== m ? (c = /* @__PURE__ */ l(F, { TypographyProps: s, ...i, children: m }), t[12] = i, t[13] = s, t[14] = m, t[15] = c) : c = t[15], c;
49
50
  }
50
- function tt({
51
+ function et({
51
52
  refUI: e
52
53
  }) {
53
54
  return [{
@@ -61,12 +62,12 @@ function tt({
61
62
  }
62
63
  }];
63
64
  }
64
- function et() {
65
+ function it() {
65
66
  return {
66
67
  series: []
67
68
  };
68
69
  }
69
- function it(e) {
70
+ function ot(e) {
70
71
  const t = S(9), o = b(null), i = y(V);
71
72
  let n, f;
72
73
  t[0] !== e.id || t[1] !== i ? (n = () => {
@@ -87,15 +88,15 @@ function it(e) {
87
88
  ] });
88
89
  }, t[4] = e.id, t[5] = r) : r = t[5];
89
90
  let d;
90
- return t[6] !== e.id || t[7] !== r ? (d = /* @__PURE__ */ l(I, { ref: o, children: /* @__PURE__ */ l(T, { id: e.id, children: r }) }), t[6] = e.id, t[7] = r, t[8] = d) : d = t[8], d;
91
+ return t[6] !== e.id || t[7] !== r ? (d = /* @__PURE__ */ l(p, { ref: o, children: /* @__PURE__ */ l(T, { id: e.id, children: r }) }), t[6] = e.id, t[7] = r, t[8] = d) : d = t[8], d;
91
92
  }
92
93
  function V(e) {
93
94
  return e.setWidget;
94
95
  }
95
- function ot() {
96
+ function rt() {
96
97
  const e = S(1);
97
98
  let t;
98
- return e[0] === Symbol.for("react.memo_cache_sentinel") ? (t = /* @__PURE__ */ l(I, { sx: _.row, "aria-label": "Formula skeleton", children: /* @__PURE__ */ l($, { width: 120, height: 32 }) }), e[0] = t) : t = e[0], t;
99
+ return e[0] === Symbol.for("react.memo_cache_sentinel") ? (t = /* @__PURE__ */ l(p, { sx: _.row, "aria-label": "Formula skeleton", children: /* @__PURE__ */ l($, { width: 120, height: 32 }) }), e[0] = t) : t = e[0], t;
99
100
  }
100
101
  function B(e) {
101
102
  return {
@@ -104,21 +105,21 @@ function B(e) {
104
105
  suffix: typeof e.suffix == "string" ? e.suffix : void 0
105
106
  };
106
107
  }
107
- function rt(e) {
108
+ function nt(e) {
108
109
  return e?.map(B);
109
110
  }
110
111
  export {
111
- ot as FormulaSkeleton,
112
- it as FormulaUI,
112
+ rt as FormulaSkeleton,
113
+ ot as FormulaUI,
113
114
  F as Item,
114
115
  P as Prefix,
115
116
  T as Row,
116
117
  D as Series,
117
118
  W as Suffix,
118
119
  U as Value,
119
- et as formulaConfig,
120
- tt as formulaDownloadConfig,
120
+ it as formulaConfig,
121
+ et as formulaDownloadConfig,
121
122
  B as sanitizeDataItem,
122
- rt as sanitizeDataItems
123
+ nt as sanitizeDataItems
123
124
  };
124
125
  //# sourceMappingURL=formula.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"formula.js","sources":["../../src/widgets/formula/components/value.tsx","../../src/widgets/formula/config.ts","../../src/widgets/formula/formula-ui.tsx","../../src/widgets/formula/skeleton.tsx","../../src/widgets/formula/serializer.ts"],"sourcesContent":["import { type FormulaWidgetState, type ValueProps } from '../types'\nimport { useWidgetStore } from '../../stores/widget-store'\nimport { Item } from './item'\nimport { useShallow } from 'zustand/shallow'\n\nconst defaultFormatter = (value: number) => value.toString()\n\nexport function Value({ id, index = 0, ...props }: ValueProps) {\n const {\n value,\n color,\n formatter = defaultFormatter,\n } = useWidgetStore(\n useShallow((state) => {\n const widget = state.getWidget<FormulaWidgetState>(id)\n return {\n value: widget?.data?.[index]?.value,\n color: widget?.data?.[index]?.color,\n formatter: widget?.formatter,\n }\n }),\n )\n\n return (\n <Item TypographyProps={{ color }} {...props}>\n {formatter(value ?? 0)}\n </Item>\n )\n}\n","import { downloadToCSV, downloadToPNG } from '../actions'\nimport type { ConfigProps } from '../root/types'\nimport type { FormulaDownloadConfig, FormulaWidgetConfig } from './types'\n\nexport function formulaDownloadConfig({\n refUI,\n}: ConfigProps): FormulaDownloadConfig {\n return [\n {\n ...downloadToPNG,\n modifier: () => downloadToPNG.modifier(refUI),\n },\n {\n ...downloadToCSV,\n modifier: async (data) => {\n const formulaData = [data?.map((item) => item.value) ?? []]\n return downloadToCSV.modifier(formulaData)\n },\n },\n ]\n}\n\nexport function formulaConfig(): FormulaWidgetConfig {\n return {\n series: [],\n }\n}\n","import type { FormulaUIProps } from './types'\nimport { Row } from './components/row'\nimport { Value } from './components/value'\nimport { Prefix } from './components/prefix'\nimport { Suffix } from './components/suffix'\nimport { Series } from './components/series'\nimport { useRef, useEffect } from 'react'\nimport { useWidgetStore } from '../stores/widget-store'\nimport { Box } from '@mui/material'\n\nexport function FormulaUI(props: FormulaUIProps) {\n const ref = useRef<HTMLElement | null>(null)\n const setWidget = useWidgetStore((store) => store.setWidget)\n\n useEffect(() => {\n if (ref.current) {\n setWidget(props.id, { refUI: ref })\n }\n }, [props.id, setWidget])\n\n return (\n <Box ref={ref}>\n <Row id={props.id}>\n {({ index }) => (\n <>\n <Series id={props.id} index={index} />\n <Prefix id={props.id} index={index} />\n <Value id={props.id} index={index} />\n <Suffix id={props.id} index={index} />\n </>\n )}\n </Row>\n </Box>\n )\n}\n","import { Box, Skeleton } from '@mui/material'\nimport { styles } from './style'\n\nexport function FormulaSkeleton() {\n return (\n <Box sx={styles.row} aria-label='Formula skeleton'>\n <Skeleton width={120} height={32} />\n </Box>\n )\n}\n","import type { DataItem } from './types'\n\n/**\n * Sanitizes DataItem by converting ReactNode prefix/suffix values to undefined.\n * This ensures only string values are stored in the widget state.\n *\n * @param item - The DataItem to sanitize\n * @returns A new DataItem with ReactNode prefix/suffix values converted to undefined\n */\nexport function sanitizeDataItem(item: DataItem): DataItem {\n return {\n ...item,\n prefix: typeof item.prefix === 'string' ? item.prefix : undefined,\n suffix: typeof item.suffix === 'string' ? item.suffix : undefined,\n }\n}\n\n/**\n * Sanitizes an array of DataItems by converting ReactNode prefix/suffix values to undefined.\n *\n * @param items - Array of DataItems to sanitize\n * @returns A new array with sanitized DataItems\n */\nexport function sanitizeDataItems(\n items: DataItem[] | undefined,\n): DataItem[] | undefined {\n return items?.map(sanitizeDataItem)\n}\n"],"names":["defaultFormatter","value","toString","Value","t0","$","_c","id","props","t1","index","undefined","t2","state","widget","getWidget","data","color","formatter","t3","useWidgetStore","useShallow","t4","t5","t6","t7","Item","formulaDownloadConfig","refUI","downloadToPNG","modifier","downloadToCSV","formulaData","map","item","formulaConfig","series","FormulaUI","ref","useRef","setWidget","_temp","current","useEffect","jsxs","Fragment","jsx","Series","Prefix","Suffix","Box","Row","store","FormulaSkeleton","Symbol","for","styles","row","Skeleton","sanitizeDataItem","prefix","suffix","sanitizeDataItems","items"],"mappings":"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"}
1
+ {"version":3,"file":"formula.js","sources":["../../src/widgets/formula/components/value.tsx","../../src/widgets/formula/config.ts","../../src/widgets/formula/formula-ui.tsx","../../src/widgets/formula/skeleton.tsx","../../src/widgets/formula/serializer.ts"],"sourcesContent":["import { type FormulaWidgetState, type ValueProps } from '../types'\nimport { useWidgetStore } from '../../stores/widget-store'\nimport { Item } from './item'\nimport { useShallow } from 'zustand/shallow'\n\nconst defaultFormatter = (value: number) => value.toString()\n\nexport function Value({ id, index = 0, ...props }: ValueProps) {\n const {\n value,\n color,\n formatter = defaultFormatter,\n } = useWidgetStore(\n useShallow((state) => {\n const widget = state.getWidget<FormulaWidgetState>(id)\n return {\n value: widget?.data?.[index]?.value,\n color: widget?.data?.[index]?.color,\n formatter: widget?.formatter,\n }\n }),\n )\n\n return (\n <Item TypographyProps={{ color }} {...props}>\n {formatter(value ?? 0)}\n </Item>\n )\n}\n","import { downloadToCSV, downloadToPNG } from '../actions'\nimport type { ConfigProps } from '../root/types'\nimport type { FormulaDownloadConfig, FormulaWidgetConfig } from './types'\n\nexport function formulaDownloadConfig({\n refUI,\n}: ConfigProps): FormulaDownloadConfig {\n return [\n {\n ...downloadToPNG,\n modifier: () => downloadToPNG.modifier(refUI),\n },\n {\n ...downloadToCSV,\n modifier: async (data) => {\n const formulaData = [data?.map((item) => item.value) ?? []]\n return downloadToCSV.modifier(formulaData)\n },\n },\n ]\n}\n\nexport function formulaConfig(): FormulaWidgetConfig {\n return {\n series: [],\n }\n}\n","import type { FormulaUIProps } from './types'\nimport { Row } from './components/row'\nimport { Value } from './components/value'\nimport { Prefix } from './components/prefix'\nimport { Suffix } from './components/suffix'\nimport { Series } from './components/series'\nimport { useRef, useEffect } from 'react'\nimport { useWidgetStore } from '../stores/widget-store'\nimport { Box } from '@mui/material'\n\nexport function FormulaUI(props: FormulaUIProps) {\n const ref = useRef<HTMLElement | null>(null)\n const setWidget = useWidgetStore((store) => store.setWidget)\n\n useEffect(() => {\n if (ref.current) {\n setWidget(props.id, { refUI: ref })\n }\n }, [props.id, setWidget])\n\n return (\n <Box ref={ref}>\n <Row id={props.id}>\n {({ index }) => (\n <>\n <Series id={props.id} index={index} />\n <Prefix id={props.id} index={index} />\n <Value id={props.id} index={index} />\n <Suffix id={props.id} index={index} />\n </>\n )}\n </Row>\n </Box>\n )\n}\n","import { Box, Skeleton } from '@mui/material'\nimport { styles } from './style'\n\nexport function FormulaSkeleton() {\n return (\n <Box sx={styles.row} aria-label='Formula skeleton'>\n <Skeleton width={120} height={32} />\n </Box>\n )\n}\n","import type { DataItem } from './types'\n\n/**\n * Sanitizes DataItem by converting ReactNode prefix/suffix values to undefined.\n * This ensures only string values are stored in the widget state.\n *\n * @param item - The DataItem to sanitize\n * @returns A new DataItem with ReactNode prefix/suffix values converted to undefined\n */\nexport function sanitizeDataItem(item: DataItem): DataItem {\n return {\n ...item,\n prefix: typeof item.prefix === 'string' ? item.prefix : undefined,\n suffix: typeof item.suffix === 'string' ? item.suffix : undefined,\n }\n}\n\n/**\n * Sanitizes an array of DataItems by converting ReactNode prefix/suffix values to undefined.\n *\n * @param items - Array of DataItems to sanitize\n * @returns A new array with sanitized DataItems\n */\nexport function sanitizeDataItems(\n items: DataItem[] | undefined,\n): DataItem[] | undefined {\n return items?.map(sanitizeDataItem)\n}\n"],"names":["defaultFormatter","value","toString","Value","t0","$","_c","id","props","t1","index","undefined","t2","state","widget","getWidget","data","color","formatter","t3","useWidgetStore","useShallow","t4","t5","t6","t7","Item","formulaDownloadConfig","refUI","downloadToPNG","modifier","downloadToCSV","formulaData","map","item","formulaConfig","series","FormulaUI","ref","useRef","setWidget","_temp","current","useEffect","jsxs","Fragment","jsx","Series","Prefix","Suffix","Box","Row","store","FormulaSkeleton","Symbol","for","styles","row","Skeleton","sanitizeDataItem","prefix","suffix","sanitizeDataItems","items"],"mappings":"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"}
@@ -4,59 +4,60 @@ import "react";
4
4
  import "echarts";
5
5
  import "../widget-store-DNyVElxd.js";
6
6
  import "zustand/shallow";
7
- import { g } from "../options-D9wflre6.js";
8
- import { m } from "../utils-Dv5Z47UQ.js";
7
+ import { g as m } from "../options-D9wflre6.js";
8
+ import { m as g } from "../utils-Dv5Z47UQ.js";
9
9
  import { f as u, c as h, b as y, a as d, d as b } from "../styles-dOu_pRNb.js";
10
10
  import { Box as n, Skeleton as l } from "@mui/material";
11
11
  import "@mui/icons-material";
12
+ import "react-markdown";
12
13
  import { d as a, a as s } from "../exports-Cr43OCul.js";
13
14
  import "../lasso-tool-CYn3ivf-.js";
14
15
  import "../cjs-D9ro6BXv.js";
15
16
  import "@dnd-kit/core";
16
17
  import "@dnd-kit/sortable";
17
18
  import "@dnd-kit/utilities";
18
- function H({
19
- refUI: t
19
+ function W({
20
+ refUI: e
20
21
  }) {
21
22
  return [{
22
23
  ...a,
23
- modifier: () => a.modifier(t)
24
+ modifier: () => a.modifier(e)
24
25
  }, {
25
26
  ...s,
26
- modifier: async (e) => {
27
- const i = u(e);
27
+ modifier: async (t) => {
28
+ const i = u(t);
28
29
  return s.modifier(i);
29
30
  }
30
31
  }];
31
32
  }
32
- function W(t) {
33
+ function q(e) {
33
34
  return {
34
35
  type: "histogram",
35
- option: m(g(t), x(t))
36
+ option: g(m(e), x(e))
36
37
  };
37
38
  }
38
39
  function x({
39
- data: t = [],
40
- theme: e
40
+ data: e = [],
41
+ theme: t
41
42
  }) {
42
- const i = (t?.length ?? 0) > 1;
43
+ const i = (e?.length ?? 0) > 1;
43
44
  return {
44
45
  legend: d(i),
45
- grid: y(i, e),
46
+ grid: y(i, t),
46
47
  xAxis: {
47
48
  type: "category",
48
49
  axisLine: {
49
50
  show: !1
50
51
  },
51
52
  axisLabel: {
52
- fontSize: e.typography.overlineDelicate.fontSize,
53
- fontFamily: e.typography.overlineDelicate.fontFamily,
53
+ fontSize: t.typography.overlineDelicate.fontSize,
54
+ fontFamily: t.typography.overlineDelicate.fontFamily,
54
55
  showMinLabel: !0,
55
56
  showMaxLabel: !0,
56
57
  hideOverlap: !0,
57
58
  margin: 0,
58
- padding: [parseInt(e.spacing(0.5)), parseInt(e.spacing(0.5)), 0, parseInt(e.spacing(0.5))],
59
- color: e.palette.black[60]
59
+ padding: [parseInt(t.spacing(0.5)), parseInt(t.spacing(0.5)), 0, parseInt(t.spacing(0.5))],
60
+ color: t.palette.black[60]
60
61
  },
61
62
  axisTick: {
62
63
  show: !1
@@ -64,7 +65,7 @@ function x({
64
65
  splitLine: {
65
66
  show: !0,
66
67
  lineStyle: {
67
- color: e.palette.black[4]
68
+ color: t.palette.black[4]
68
69
  }
69
70
  }
70
71
  },
@@ -74,9 +75,9 @@ function x({
74
75
  showMinLabel: !0,
75
76
  splitNumber: 1,
76
77
  axisLabel: {
77
- fontSize: e.typography.overlineDelicate.fontSize,
78
- fontFamily: e.typography.overlineDelicate.fontFamily,
79
- margin: parseInt(e.spacing(1)),
78
+ fontSize: t.typography.overlineDelicate.fontSize,
79
+ fontFamily: t.typography.overlineDelicate.fontFamily,
80
+ margin: parseInt(t.spacing(1)),
80
81
  show: !0,
81
82
  showMaxLabel: !0,
82
83
  showMinLabel: !0,
@@ -91,14 +92,14 @@ function x({
91
92
  splitLine: {
92
93
  show: !0,
93
94
  lineStyle: {
94
- color: e.palette.black[4]
95
+ color: t.palette.black[4]
95
96
  }
96
97
  }
97
98
  },
98
99
  tooltip: {
99
- position: h(e)
100
+ position: h(t)
100
101
  },
101
- series: t.map((r, p) => ({
102
+ series: e.map((r, p) => ({
102
103
  datasetIndex: p,
103
104
  type: "bar",
104
105
  barGap: "1%",
@@ -116,20 +117,20 @@ const w = {
116
117
  graph: b.graph
117
118
  }
118
119
  };
119
- function q() {
120
- const t = f(2);
121
- let e;
122
- t[0] === Symbol.for("react.memo_cache_sentinel") ? (e = /* @__PURE__ */ o(n, { sx: {
120
+ function J() {
121
+ const e = f(2);
122
+ let t;
123
+ e[0] === Symbol.for("react.memo_cache_sentinel") ? (t = /* @__PURE__ */ o(n, { sx: {
123
124
  display: "flex",
124
125
  alignItems: "flex-end",
125
126
  justifyContent: "space-between",
126
127
  gap: k,
127
128
  height: C,
128
129
  width: "100%"
129
- }, children: Array(8).fill(0).map(S) }), t[0] = e) : e = t[0];
130
+ }, children: Array(8).fill(0).map(S) }), e[0] = t) : t = e[0];
130
131
  let i;
131
- return t[1] === Symbol.for("react.memo_cache_sentinel") ? (i = /* @__PURE__ */ c(n, { sx: w.skeleton.graph.container, children: [
132
- e,
132
+ return e[1] === Symbol.for("react.memo_cache_sentinel") ? (i = /* @__PURE__ */ c(n, { sx: w.skeleton.graph.container, children: [
133
+ t,
133
134
  /* @__PURE__ */ o(n, { sx: {
134
135
  display: "flex",
135
136
  alignItems: "center",
@@ -137,39 +138,39 @@ function q() {
137
138
  width: "100%",
138
139
  mt: L
139
140
  }, children: Array(4).fill(0).map(_) })
140
- ] }), t[1] = i) : i = t[1], i;
141
+ ] }), e[1] = i) : i = e[1], i;
141
142
  }
142
- function _(t, e) {
143
- return /* @__PURE__ */ o(l, { width: 32, height: 8 }, e);
143
+ function _(e, t) {
144
+ return /* @__PURE__ */ o(l, { width: 32, height: 8 }, t);
144
145
  }
145
- function L(t) {
146
+ function L(e) {
146
147
  const {
147
- spacing: e
148
- } = t;
149
- return e(1);
148
+ spacing: t
149
+ } = e;
150
+ return t(1);
150
151
  }
151
- function S(t, e) {
152
- const r = `${[60, 80, 95, 85, 70, 55, 40, 30][e]}%`;
152
+ function S(e, t) {
153
+ const r = `${[60, 80, 95, 85, 70, 55, 40, 30][t]}%`;
153
154
  return /* @__PURE__ */ o(l, { variant: "rectangular", sx: {
154
155
  flex: 1,
155
156
  height: r
156
- } }, e);
157
+ } }, t);
157
158
  }
158
- function C(t) {
159
+ function C(e) {
159
160
  const {
160
- spacing: e
161
- } = t;
162
- return e(30);
161
+ spacing: t
162
+ } = e;
163
+ return t(30);
163
164
  }
164
- function k(t) {
165
+ function k(e) {
165
166
  const {
166
- spacing: e
167
- } = t;
168
- return e(0.5);
167
+ spacing: t
168
+ } = e;
169
+ return t(0.5);
169
170
  }
170
171
  export {
171
- q as HistogramSkeleton,
172
- W as histogramConfig,
173
- H as histogramDownloadConfig
172
+ J as HistogramSkeleton,
173
+ q as histogramConfig,
174
+ W as histogramDownloadConfig
174
175
  };
175
176
  //# sourceMappingURL=histogram.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"histogram.js","sources":["../../src/widgets/histogram/config.ts","../../src/widgets/histogram/style.ts","../../src/widgets/histogram/skeleton.tsx"],"sourcesContent":["import {\n getCommonOptions,\n mergeEchartWidgetConfig,\n type EchartOptionsProps,\n} from '../echart'\nimport type {\n HistogramConfig,\n HistogramWidgetConfig,\n HistogramWidgetData,\n} from './types'\nimport {\n flattenObjectArrayToCSV,\n buildLegendConfig,\n buildGridConfig,\n createTooltipPositioner,\n} from '../_shared/chart-config'\nimport { downloadToCSV, downloadToPNG, type DownloadItem } from '../actions'\nimport type { ConfigProps } from '../root/types'\n\nexport function histogramDownloadConfig({\n refUI,\n}: ConfigProps): DownloadItem<HistogramWidgetData>[] {\n return [\n {\n ...downloadToPNG,\n modifier: () => downloadToPNG.modifier(refUI),\n },\n {\n ...downloadToCSV,\n modifier: async (data) => {\n const rows = flattenObjectArrayToCSV(data)\n return downloadToCSV.modifier(rows)\n },\n },\n ]\n}\nexport function histogramConfig(props: HistogramConfig): HistogramWidgetConfig {\n return {\n type: 'histogram',\n option: mergeEchartWidgetConfig(getCommonOptions(props), getOption(props)),\n }\n}\nfunction getOption({ data = [], theme }: HistogramConfig): EchartOptionsProps {\n const hasLegend = (data?.length ?? 0) > 1\n return {\n legend: buildLegendConfig(hasLegend),\n grid: buildGridConfig(hasLegend, theme),\n xAxis: {\n type: 'category',\n axisLine: {\n show: false,\n },\n axisLabel: {\n fontSize: theme.typography.overlineDelicate.fontSize,\n fontFamily: theme.typography.overlineDelicate.fontFamily,\n showMinLabel: true,\n showMaxLabel: true,\n hideOverlap: true,\n margin: 0,\n padding: [\n parseInt(theme.spacing(0.5)),\n parseInt(theme.spacing(0.5)),\n 0,\n parseInt(theme.spacing(0.5)),\n ],\n color: theme.palette.black[60],\n },\n axisTick: {\n show: false,\n },\n splitLine: {\n show: true,\n lineStyle: {\n color: theme.palette.black[4],\n },\n },\n },\n yAxis: {\n type: 'value',\n showMaxLabel: true,\n showMinLabel: true,\n splitNumber: 1,\n axisLabel: {\n fontSize: theme.typography.overlineDelicate.fontSize,\n fontFamily: theme.typography.overlineDelicate.fontFamily,\n margin: parseInt(theme.spacing(1)),\n show: true,\n showMaxLabel: true,\n showMinLabel: true,\n verticalAlign: 'bottom',\n },\n axisLine: {\n show: false,\n },\n axisTick: {\n show: false,\n },\n splitLine: {\n show: true,\n lineStyle: {\n color: theme.palette.black[4],\n },\n },\n },\n tooltip: {\n position: createTooltipPositioner(theme),\n },\n series: data.map((_: unknown, index: number) => ({\n datasetIndex: index,\n type: 'bar',\n barGap: '1%', // No gap between bars in histogram\n barCategoryGap: '1%', // No gap between categories in histogram\n emphasis: {\n focus: 'series',\n },\n })),\n } as EchartOptionsProps\n}\n","import type { SxProps, Theme } from '@mui/material'\nimport { baseSkeletonStyles } from '../_shared/skeleton'\n\nexport const styles = {\n skeleton: {\n graph: baseSkeletonStyles.graph,\n },\n} satisfies Record<string, SxProps<Theme>>\n","import { Box, Skeleton } from '@mui/material'\nimport { styles } from './style'\n\nexport function HistogramSkeleton() {\n return (\n <Box sx={styles.skeleton.graph.container}>\n <Box\n sx={{\n display: 'flex',\n alignItems: 'flex-end',\n justifyContent: 'space-between',\n gap: ({ spacing }) => spacing(0.5),\n height: ({ spacing }) => spacing(30),\n width: '100%',\n }}\n >\n {Array(8)\n .fill(0)\n .map((_, i) => {\n // Create varying heights for histogram bars\n const heights = [60, 80, 95, 85, 70, 55, 40, 30]\n const height = `${heights[i]}%`\n return (\n <Skeleton\n key={i}\n variant='rectangular'\n sx={{\n flex: 1,\n height,\n }}\n />\n )\n })}\n </Box>\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n width: '100%',\n mt: ({ spacing }) => spacing(1),\n }}\n >\n {Array(4)\n .fill(0)\n .map((_, i) => (\n <Skeleton key={i} width={32} height={8} />\n ))}\n </Box>\n </Box>\n )\n}\n"],"names":["histogramDownloadConfig","refUI","downloadToPNG","modifier","downloadToCSV","data","rows","flattenObjectArrayToCSV","histogramConfig","props","type","option","mergeEchartWidgetConfig","getCommonOptions","getOption","theme","hasLegend","length","legend","buildLegendConfig","grid","buildGridConfig","xAxis","axisLine","show","axisLabel","fontSize","typography","overlineDelicate","fontFamily","showMinLabel","showMaxLabel","hideOverlap","margin","padding","parseInt","spacing","color","palette","black","axisTick","splitLine","lineStyle","yAxis","splitNumber","verticalAlign","tooltip","position","createTooltipPositioner","series","map","_","index","datasetIndex","barGap","barCategoryGap","emphasis","focus","styles","skeleton","graph","baseSkeletonStyles","HistogramSkeleton","$","_c","t0","Symbol","for","jsx","Box","display","alignItems","justifyContent","gap","_temp","height","_temp2","width","Array","fill","_temp3","t1","container","mt","_temp4","_temp5","__0","i_0","Skeleton","spacing_1","i","flex","spacing_0"],"mappings":"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"}
1
+ {"version":3,"file":"histogram.js","sources":["../../src/widgets/histogram/config.ts","../../src/widgets/histogram/style.ts","../../src/widgets/histogram/skeleton.tsx"],"sourcesContent":["import {\n getCommonOptions,\n mergeEchartWidgetConfig,\n type EchartOptionsProps,\n} from '../echart'\nimport type {\n HistogramConfig,\n HistogramWidgetConfig,\n HistogramWidgetData,\n} from './types'\nimport {\n flattenObjectArrayToCSV,\n buildLegendConfig,\n buildGridConfig,\n createTooltipPositioner,\n} from '../_shared/chart-config'\nimport { downloadToCSV, downloadToPNG, type DownloadItem } from '../actions'\nimport type { ConfigProps } from '../root/types'\n\nexport function histogramDownloadConfig({\n refUI,\n}: ConfigProps): DownloadItem<HistogramWidgetData>[] {\n return [\n {\n ...downloadToPNG,\n modifier: () => downloadToPNG.modifier(refUI),\n },\n {\n ...downloadToCSV,\n modifier: async (data) => {\n const rows = flattenObjectArrayToCSV(data)\n return downloadToCSV.modifier(rows)\n },\n },\n ]\n}\nexport function histogramConfig(props: HistogramConfig): HistogramWidgetConfig {\n return {\n type: 'histogram',\n option: mergeEchartWidgetConfig(getCommonOptions(props), getOption(props)),\n }\n}\nfunction getOption({ data = [], theme }: HistogramConfig): EchartOptionsProps {\n const hasLegend = (data?.length ?? 0) > 1\n return {\n legend: buildLegendConfig(hasLegend),\n grid: buildGridConfig(hasLegend, theme),\n xAxis: {\n type: 'category',\n axisLine: {\n show: false,\n },\n axisLabel: {\n fontSize: theme.typography.overlineDelicate.fontSize,\n fontFamily: theme.typography.overlineDelicate.fontFamily,\n showMinLabel: true,\n showMaxLabel: true,\n hideOverlap: true,\n margin: 0,\n padding: [\n parseInt(theme.spacing(0.5)),\n parseInt(theme.spacing(0.5)),\n 0,\n parseInt(theme.spacing(0.5)),\n ],\n color: theme.palette.black[60],\n },\n axisTick: {\n show: false,\n },\n splitLine: {\n show: true,\n lineStyle: {\n color: theme.palette.black[4],\n },\n },\n },\n yAxis: {\n type: 'value',\n showMaxLabel: true,\n showMinLabel: true,\n splitNumber: 1,\n axisLabel: {\n fontSize: theme.typography.overlineDelicate.fontSize,\n fontFamily: theme.typography.overlineDelicate.fontFamily,\n margin: parseInt(theme.spacing(1)),\n show: true,\n showMaxLabel: true,\n showMinLabel: true,\n verticalAlign: 'bottom',\n },\n axisLine: {\n show: false,\n },\n axisTick: {\n show: false,\n },\n splitLine: {\n show: true,\n lineStyle: {\n color: theme.palette.black[4],\n },\n },\n },\n tooltip: {\n position: createTooltipPositioner(theme),\n },\n series: data.map((_: unknown, index: number) => ({\n datasetIndex: index,\n type: 'bar',\n barGap: '1%', // No gap between bars in histogram\n barCategoryGap: '1%', // No gap between categories in histogram\n emphasis: {\n focus: 'series',\n },\n })),\n } as EchartOptionsProps\n}\n","import type { SxProps, Theme } from '@mui/material'\nimport { baseSkeletonStyles } from '../_shared/skeleton'\n\nexport const styles = {\n skeleton: {\n graph: baseSkeletonStyles.graph,\n },\n} satisfies Record<string, SxProps<Theme>>\n","import { Box, Skeleton } from '@mui/material'\nimport { styles } from './style'\n\nexport function HistogramSkeleton() {\n return (\n <Box sx={styles.skeleton.graph.container}>\n <Box\n sx={{\n display: 'flex',\n alignItems: 'flex-end',\n justifyContent: 'space-between',\n gap: ({ spacing }) => spacing(0.5),\n height: ({ spacing }) => spacing(30),\n width: '100%',\n }}\n >\n {Array(8)\n .fill(0)\n .map((_, i) => {\n // Create varying heights for histogram bars\n const heights = [60, 80, 95, 85, 70, 55, 40, 30]\n const height = `${heights[i]}%`\n return (\n <Skeleton\n key={i}\n variant='rectangular'\n sx={{\n flex: 1,\n height,\n }}\n />\n )\n })}\n </Box>\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n width: '100%',\n mt: ({ spacing }) => spacing(1),\n }}\n >\n {Array(4)\n .fill(0)\n .map((_, i) => (\n <Skeleton key={i} width={32} height={8} />\n ))}\n </Box>\n </Box>\n )\n}\n"],"names":["histogramDownloadConfig","refUI","downloadToPNG","modifier","downloadToCSV","data","rows","flattenObjectArrayToCSV","histogramConfig","props","type","option","mergeEchartWidgetConfig","getCommonOptions","getOption","theme","hasLegend","length","legend","buildLegendConfig","grid","buildGridConfig","xAxis","axisLine","show","axisLabel","fontSize","typography","overlineDelicate","fontFamily","showMinLabel","showMaxLabel","hideOverlap","margin","padding","parseInt","spacing","color","palette","black","axisTick","splitLine","lineStyle","yAxis","splitNumber","verticalAlign","tooltip","position","createTooltipPositioner","series","map","_","index","datasetIndex","barGap","barCategoryGap","emphasis","focus","styles","skeleton","graph","baseSkeletonStyles","HistogramSkeleton","$","_c","t0","Symbol","for","jsx","Box","display","alignItems","justifyContent","gap","_temp","height","_temp2","width","Array","fill","_temp3","t1","container","mt","_temp4","_temp5","__0","i_0","Skeleton","spacing_1","i","flex","spacing_0"],"mappings":"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"}