@carto/ps-react-ui 4.5.0 → 4.6.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 (99) hide show
  1. package/dist/{download-config-DemuQ3Jm.js → download-config-C3I0jWIL.js} +2 -2
  2. package/dist/{download-config-DemuQ3Jm.js.map → download-config-C3I0jWIL.js.map} +1 -1
  3. package/dist/{row-D4VOhcNI.js → row-DZSP99LW.js} +2 -2
  4. package/dist/{row-D4VOhcNI.js.map → row-DZSP99LW.js.map} +1 -1
  5. package/dist/{series-Bola3CmD.js → series-DLNHDWs0.js} +3 -3
  6. package/dist/{series-Bola3CmD.js.map → series-DLNHDWs0.js.map} +1 -1
  7. package/dist/types/hooks/index.d.ts +0 -1
  8. package/dist/types/widgets/actions/brush-toggle/brush-toggle.d.ts +3 -0
  9. package/dist/types/widgets/actions/index.d.ts +4 -4
  10. package/dist/types/widgets/actions/lock-selection/types.d.ts +2 -0
  11. package/dist/types/widgets/actions/relative-data/relative-data.d.ts +7 -2
  12. package/dist/types/widgets/actions/relative-data/types.d.ts +2 -0
  13. package/dist/types/widgets/actions/zoom-toggle/zoom-toggle.d.ts +4 -0
  14. package/dist/types/widgets/category/index.d.ts +10 -2
  15. package/dist/types/widgets/category/style.d.ts +1 -0
  16. package/dist/types/widgets/no-data/no-data.d.ts +3 -2
  17. package/dist/types/widgets/no-data/types.d.ts +5 -1
  18. package/dist/types/widgets/stores/index.d.ts +1 -1
  19. package/dist/types/widgets/stores/types.d.ts +10 -10
  20. package/dist/types/widgets/stores/widget-store.d.ts +2 -3
  21. package/dist/types/widgets/table/index.d.ts +6 -2
  22. package/dist/{use-widget-ref-BFazQvJK.js → use-widget-ref-Ddr_SlJJ.js} +2 -2
  23. package/dist/{use-widget-ref-BFazQvJK.js.map → use-widget-ref-Ddr_SlJJ.js.map} +1 -1
  24. package/dist/{use-widget-selector-DqRmWQ1K.js → use-widget-selector-DFl2hW0R.js} +2 -2
  25. package/dist/{use-widget-selector-DqRmWQ1K.js.map → use-widget-selector-DFl2hW0R.js.map} +1 -1
  26. package/dist/{widget-store-CIrb9RKP.js → widget-store-Bw5zRUGg.js} +93 -95
  27. package/dist/widget-store-Bw5zRUGg.js.map +1 -0
  28. package/dist/widgets/actions.js +770 -755
  29. package/dist/widgets/actions.js.map +1 -1
  30. package/dist/widgets/bar.js +2 -2
  31. package/dist/widgets/category.js +187 -183
  32. package/dist/widgets/category.js.map +1 -1
  33. package/dist/widgets/echart.js +2 -2
  34. package/dist/widgets/error.js +37 -2
  35. package/dist/widgets/error.js.map +1 -1
  36. package/dist/widgets/formula.js +5 -5
  37. package/dist/widgets/histogram.js +1 -1
  38. package/dist/widgets/loader.js +1 -1
  39. package/dist/widgets/markdown.js +2 -2
  40. package/dist/widgets/no-data.js +58 -2
  41. package/dist/widgets/no-data.js.map +1 -1
  42. package/dist/widgets/note.js +121 -2
  43. package/dist/widgets/note.js.map +1 -1
  44. package/dist/widgets/pie.js +2 -2
  45. package/dist/widgets/range.js +3 -3
  46. package/dist/widgets/scatterplot.js +2 -2
  47. package/dist/widgets/skeleton-loader.js +1 -1
  48. package/dist/widgets/spread.js +5 -5
  49. package/dist/widgets/stores.js +2 -2
  50. package/dist/widgets/subheader.js +29 -29
  51. package/dist/widgets/subheader.js.map +1 -1
  52. package/dist/widgets/table.js +3 -3
  53. package/dist/widgets/timeseries.js +2 -2
  54. package/dist/widgets/utils.js +1 -1
  55. package/dist/widgets/wrapper.js +2 -2
  56. package/package.json +1 -5
  57. package/src/hooks/index.ts +0 -1
  58. package/src/widgets/actions/brush-toggle/brush-toggle.tsx +18 -22
  59. package/src/widgets/actions/change-column/change-column.test.tsx +1 -1
  60. package/src/widgets/actions/download/download.test.tsx +1 -1
  61. package/src/widgets/actions/index.ts +11 -2
  62. package/src/widgets/actions/lock-selection/lock-selection.test.tsx +14 -0
  63. package/src/widgets/actions/lock-selection/lock-selection.tsx +18 -11
  64. package/src/widgets/actions/lock-selection/types.ts +2 -0
  65. package/src/widgets/actions/relative-data/relative-data.test.tsx +211 -20
  66. package/src/widgets/actions/relative-data/relative-data.tsx +65 -34
  67. package/src/widgets/actions/relative-data/types.ts +2 -0
  68. package/src/widgets/actions/searcher/searcher.tsx +28 -30
  69. package/src/widgets/actions/stack-toggle/stack-toggle.tsx +11 -2
  70. package/src/widgets/actions/zoom-toggle/zoom-toggle.tsx +53 -45
  71. package/src/widgets/category/category-ui.tsx +7 -6
  72. package/src/widgets/category/index.ts +13 -14
  73. package/src/widgets/category/style.ts +1 -0
  74. package/src/widgets/no-data/no-data.test.tsx +90 -40
  75. package/src/widgets/no-data/no-data.tsx +7 -5
  76. package/src/widgets/no-data/types.ts +5 -1
  77. package/src/widgets/stores/index.ts +2 -0
  78. package/src/widgets/stores/types.ts +10 -18
  79. package/src/widgets/stores/widget-store.test.ts +132 -13
  80. package/src/widgets/stores/widget-store.ts +29 -35
  81. package/src/widgets/subheader/subheader.tsx +11 -3
  82. package/src/widgets/table/index.ts +6 -4
  83. package/dist/error-Cj8eUMrl.js +0 -40
  84. package/dist/error-Cj8eUMrl.js.map +0 -1
  85. package/dist/no-data-DkIt7Qt1.js +0 -61
  86. package/dist/no-data-DkIt7Qt1.js.map +0 -1
  87. package/dist/note-t51drNe0.js +0 -124
  88. package/dist/note-t51drNe0.js.map +0 -1
  89. package/dist/types/hooks/use-debounce.d.ts +0 -19
  90. package/dist/types/widgets/category/components/index.d.ts +0 -10
  91. package/dist/types/widgets/index.d.ts +0 -9
  92. package/dist/types/widgets/table/hooks/index.d.ts +0 -6
  93. package/dist/widget-store-CIrb9RKP.js.map +0 -1
  94. package/dist/widgets.js +0 -13
  95. package/dist/widgets.js.map +0 -1
  96. package/src/hooks/use-debounce.ts +0 -55
  97. package/src/widgets/category/components/index.ts +0 -14
  98. package/src/widgets/index.ts +0 -25
  99. package/src/widgets/table/hooks/index.ts +0 -7
@@ -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 },\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\n/**\n * Renders a single horizontal bar fill proportional to its value relative to the maximum.\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 labelFormatter?: CategoryWidgetConfig['labelFormatter']\n onClick?: CategoryWidgetConfig['onRowClick']\n selected?: boolean\n}\n\n/**\n * Renders a single-series category row with a label, formatted value, and proportional bar.\n */\nexport function CategoryRowSingle({\n name,\n value,\n maxValue,\n color,\n formatter,\n labelFormatter,\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}>\n {labelFormatter ? labelFormatter(name) : name}\n </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 labelFormatter?: CategoryWidgetConfig['labelFormatter']\n onClick?: CategoryWidgetConfig['onRowClick']\n selected?: boolean\n}\n\n/**\n * Renders a multi-series category row with a label and multiple color-coded bars stacked vertically.\n */\nexport function CategoryRowMulti({\n name,\n values,\n maxValue,\n colors,\n formatter,\n labelFormatter,\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}>\n {labelFormatter ? labelFormatter(name) : name}\n </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\n/**\n * Renders an \"Other\" summary row indicating how many additional categories are hidden beyond `maxItems`.\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\n/**\n * Renders a color-coded legend for multi-series category widgets.\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 { useWidgetSelector } from '../stores/use-widget-selector'\nimport { styles } from './style'\nimport type { CategoryUIProps, CategoryWidgetState } from './types'\nimport {\n CategoryRowSingle,\n CategoryRowMulti,\n CategoryRowOther,\n CategoryLegend,\n} from './components'\nimport { useState } from 'react'\nimport { defaultFormatter, defaultLabelFormatter } from '../utils/formatter'\n\n/**\n * Renders a category widget displaying horizontal bars for categorical data with support for single and multi-series layouts, selection, and overflow grouping.\n */\nexport function CategoryUI({ id }: CategoryUIProps) {\n const theme = useTheme()\n\n // Single consolidated subscription instead of 9 separate ones.\n const {\n _formatter,\n _labelFormatter,\n _series,\n data,\n maxItems,\n labels,\n onRowClick,\n selected,\n max,\n } = useWidgetSelector(id, (w) => {\n const cw = w as CategoryWidgetState | undefined\n return {\n _formatter: cw?.formatter,\n _labelFormatter: cw?.labelFormatter,\n _series: cw?.series,\n data: cw?.data,\n maxItems: cw?.maxItems,\n labels: cw?.labels,\n onRowClick: cw?.onRowClick,\n selected: cw?.selected,\n max: cw?.max,\n }\n })\n\n const formatter = _formatter ?? defaultFormatter\n const labelFormatter = _labelFormatter ?? defaultLabelFormatter\n const series = _series ?? []\n\n const [maxHeight] = useState<string | number | undefined>(\n maxItems ? 40 * (series.length || 1) * maxItems : undefined,\n )\n\n const qualitativeColors = Object.values(theme.palette.qualitative.bold)\n\n const colors =\n series.length > 0\n ? series.map(\n (s, index: number) =>\n s.color ??\n qualitativeColors[index % qualitativeColors.length] ??\n theme.palette.secondary.main,\n )\n : [theme.palette.secondary.main]\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 = generateGroupedData({ data })\n\n if (groupedData.length === 0) {\n return null\n }\n\n const maxValue =\n max ?? Math.max(...groupedData.flatMap((item) => item.values))\n\n // Slice data to maxItems and compute hidden count\n const visibleData =\n maxItems !== undefined && maxItems >= 0\n ? groupedData.slice(0, maxItems)\n : groupedData\n\n const hiddenCount = groupedData.length - visibleData.length\n const isMulti = series.length > 1\n\n return (\n <Box\n sx={{\n ...styles.root,\n }}\n >\n <Box\n sx={styles.list}\n style={{ maxHeight, overflow: hiddenCount === 0 ? 'auto' : 'hidden' }}\n >\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 labelFormatter={labelFormatter}\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]!}\n formatter={formatter}\n labelFormatter={labelFormatter}\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\nfunction generateGroupedData({\n data,\n}: {\n data: { name: string; value: number }[][] | undefined\n}) {\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}\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 '../loader/types'\nimport type {\n CategoryWidgetConfig,\n CategoryWidgetData,\n CategorySeriesConfig,\n} from './types'\n\ninterface CategoryDownloadConfigProps extends ConfigProps {\n series?: CategorySeriesConfig[]\n}\n\n/**\n * Creates download configuration for category widgets, supporting PNG (screenshot) and CSV (data) exports. CSV output groups values by category across multiple series.\n *\n * @param props - Configuration with `refUI` reference and optional `series` for CSV column headers.\n * @returns Array of download items for use with the Download action.\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\n/**\n * Returns the default configuration for category list widgets, including empty series and a default `maxItems` of 10.\n *\n * @returns Default category widget config.\n */\nexport function categoryConfig(): CategoryWidgetConfig {\n return {\n series: [],\n maxItems: 10,\n max: undefined,\n }\n}\n"],"names":["styles","root","display","flexDirection","position","list","gap","theme","spacing","row","pointerEvents","rowClickable","rowHeader","justifyContent","alignItems","rowLabel","typography","fontWeight","color","rowValue","barContainer","bar","height","borderRadius","backgroundColor","palette","action","disabledBackground","overflow","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","labelFormatter","onClick","handleClick","rowStyle","t4","Typography","t5","t6","t7","t8","t9","jsxs","CategoryRowMulti","values","colors","index","length","map","CategoryRowOther","hiddenCount","otherCountLabel","replace","String","countText","CategoryLegend","series","item","CategoryUI","id","useTheme","_formatter","_labelFormatter","_series","data","maxItems","labels","onRowClick","max","useWidgetSelector","_temp","defaultFormatter","defaultLabelFormatter","maxHeight","useState","qualitativeColors","Object","qualitative","bold","s","secondary","main","T0","T1","Symbol","for","bb0","groupedData","generateGroupedData","Math","flatMap","_temp2","visibleData","slice","isMulti","item_0","item_1","other","w","cw","seriesCount","grouped","Map","nameOrder","seriesIndex","seriesData","get","Array","fill","set","push","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 width: '100%',\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\n/**\n * Renders a single horizontal bar fill proportional to its value relative to the maximum.\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 labelFormatter?: CategoryWidgetConfig['labelFormatter']\n onClick?: CategoryWidgetConfig['onRowClick']\n selected?: boolean\n}\n\n/**\n * Renders a single-series category row with a label, formatted value, and proportional bar.\n */\nexport function CategoryRowSingle({\n name,\n value,\n maxValue,\n color,\n formatter,\n labelFormatter,\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}>\n {labelFormatter ? labelFormatter(name) : name}\n </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 labelFormatter?: CategoryWidgetConfig['labelFormatter']\n onClick?: CategoryWidgetConfig['onRowClick']\n selected?: boolean\n}\n\n/**\n * Renders a multi-series category row with a label and multiple color-coded bars stacked vertically.\n */\nexport function CategoryRowMulti({\n name,\n values,\n maxValue,\n colors,\n formatter,\n labelFormatter,\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}>\n {labelFormatter ? labelFormatter(name) : name}\n </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\n/**\n * Renders an \"Other\" summary row indicating how many additional categories are hidden beyond `maxItems`.\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\n/**\n * Renders a color-coded legend for multi-series category widgets.\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 { useWidgetSelector } from '../stores/use-widget-selector'\nimport { styles } from './style'\nimport type { CategoryUIProps, CategoryWidgetState } from './types'\nimport { CategoryRowSingle } from './components/category-row-single'\nimport { CategoryRowMulti } from './components/category-row-multi'\nimport { CategoryRowOther } from './components/category-row-other'\nimport { CategoryLegend } from './components/category-legend'\nimport { useState } from 'react'\nimport { defaultFormatter, defaultLabelFormatter } from '../utils/formatter'\nimport { useWidgetRef } from '../../hooks'\n\n/**\n * Renders a category widget displaying horizontal bars for categorical data with support for single and multi-series layouts, selection, and overflow grouping.\n */\nexport function CategoryUI({ id }: CategoryUIProps) {\n const { ref } = useWidgetRef<HTMLDivElement>(id)\n const theme = useTheme()\n\n // Single consolidated subscription instead of 9 separate ones.\n const {\n _formatter,\n _labelFormatter,\n _series,\n data,\n maxItems,\n labels,\n onRowClick,\n selected,\n max,\n } = useWidgetSelector(id, (w) => {\n const cw = w as CategoryWidgetState | undefined\n return {\n _formatter: cw?.formatter,\n _labelFormatter: cw?.labelFormatter,\n _series: cw?.series,\n data: cw?.data,\n maxItems: cw?.maxItems,\n labels: cw?.labels,\n onRowClick: cw?.onRowClick,\n selected: cw?.selected,\n max: cw?.max,\n }\n })\n\n const formatter = _formatter ?? defaultFormatter\n const labelFormatter = _labelFormatter ?? defaultLabelFormatter\n const series = _series ?? []\n\n const [maxHeight] = useState<string | number | undefined>(\n maxItems ? 40 * (series.length || 1) * maxItems : undefined,\n )\n\n const qualitativeColors = Object.values(theme.palette.qualitative.bold)\n\n const colors =\n series.length > 0\n ? series.map(\n (s, index: number) =>\n s.color ??\n qualitativeColors[index % qualitativeColors.length] ??\n theme.palette.secondary.main,\n )\n : [theme.palette.secondary.main]\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 = generateGroupedData({ data })\n\n if (groupedData.length === 0) {\n return null\n }\n\n const maxValue =\n max ?? Math.max(...groupedData.flatMap((item) => item.values))\n\n // Slice data to maxItems and compute hidden count\n const visibleData =\n maxItems !== undefined && maxItems >= 0\n ? groupedData.slice(0, maxItems)\n : groupedData\n\n const hiddenCount = groupedData.length - visibleData.length\n const isMulti = series.length > 1\n\n return (\n <Box\n ref={ref}\n sx={{\n ...styles.root,\n }}\n >\n <Box\n sx={styles.list}\n style={{ maxHeight, overflow: hiddenCount === 0 ? 'auto' : 'hidden' }}\n >\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 labelFormatter={labelFormatter}\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]!}\n formatter={formatter}\n labelFormatter={labelFormatter}\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\nfunction generateGroupedData({\n data,\n}: {\n data: { name: string; value: number }[][] | undefined\n}) {\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}\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 '../loader/types'\nimport type {\n CategoryWidgetConfig,\n CategoryWidgetData,\n CategorySeriesConfig,\n} from './types'\n\ninterface CategoryDownloadConfigProps extends ConfigProps {\n series?: CategorySeriesConfig[]\n}\n\n/**\n * Creates download configuration for category widgets, supporting PNG (screenshot) and CSV (data) exports. CSV output groups values by category across multiple series.\n *\n * @param props - Configuration with `refUI` reference and optional `series` for CSV column headers.\n * @returns Array of download items for use with the Download action.\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\n/**\n * Returns the default configuration for category list widgets, including empty series and a default `maxItems` of 10.\n *\n * @returns Default category widget config.\n */\nexport function categoryConfig(): CategoryWidgetConfig {\n return {\n series: [],\n maxItems: 10,\n max: undefined,\n }\n}\n"],"names":["styles","root","display","flexDirection","position","width","list","gap","theme","spacing","row","pointerEvents","rowClickable","rowHeader","justifyContent","alignItems","rowLabel","typography","fontWeight","color","rowValue","barContainer","bar","height","borderRadius","backgroundColor","palette","action","disabledBackground","overflow","transition","cursor","hover","filter","barFill","barFillMuted","disabled","legend","flexWrap","paddingTop","bottom","borderTop","divider","marginTop","legendItem","legendDot","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","labelFormatter","onClick","handleClick","rowStyle","t4","Typography","t5","t6","t7","t8","t9","jsxs","CategoryRowMulti","values","colors","index","length","map","CategoryRowOther","hiddenCount","otherCountLabel","replace","String","countText","CategoryLegend","series","item","CategoryUI","id","ref","useWidgetRef","useTheme","_formatter","_labelFormatter","_series","data","maxItems","labels","onRowClick","max","useWidgetSelector","_temp","defaultFormatter","defaultLabelFormatter","maxHeight","useState","qualitativeColors","Object","qualitative","bold","s","secondary","main","T0","T1","Symbol","for","bb0","groupedData","generateGroupedData","Math","flatMap","_temp2","visibleData","slice","isMulti","item_0","item_1","other","t10","w","cw","seriesCount","grouped","Map","nameOrder","seriesIndex","seriesData","get","Array","fill","set","push","widthPatterns","CategorySkeleton","from","_","Skeleton","categoryDownloadConfig","refUI","downloadToPNG","modifier","downloadToCSV","rows","headers","i","categoryConfig"],"mappings":"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"}
@@ -2,8 +2,8 @@ import { jsx as j } from "react/jsx-runtime";
2
2
  import { c as W } from "react/compiler-runtime";
3
3
  import { useRef as U, useImperativeHandle as Z, useEffect as y } from "react";
4
4
  import * as $ from "echarts";
5
- import { u as B } from "../use-widget-ref-BFazQvJK.js";
6
- import { u as D } from "../use-widget-selector-DqRmWQ1K.js";
5
+ import { u as B } from "../use-widget-ref-Ddr_SlJJ.js";
6
+ import { u as D } from "../use-widget-selector-DFl2hW0R.js";
7
7
  import { g as T } from "../options-D9wflre6.js";
8
8
  import { g as X, a as Y, b as ee, m as te } from "../utils-BOhInag6.js";
9
9
  const z = /* @__PURE__ */ new Map();
@@ -1,5 +1,40 @@
1
- import { W as e } from "../error-Cj8eUMrl.js";
1
+ import { jsx as m, jsxs as u } from "react/jsx-runtime";
2
+ import { c as h } from "react/compiler-runtime";
3
+ import { AlertTitle as p, Alert as x } from "@mui/material";
4
+ import { u as A } from "../use-widget-selector-DFl2hW0R.js";
5
+ function P(t) {
6
+ const r = h(5), {
7
+ id: l,
8
+ children: c,
9
+ title: d,
10
+ description: g
11
+ } = t, {
12
+ isLoading: a,
13
+ isFetching: f,
14
+ error: o
15
+ } = A(l, F);
16
+ if (a || f)
17
+ return c;
18
+ if (o) {
19
+ const n = d ?? o.title ?? "Error", s = g ?? o.message ?? "An error occurred while loading the widget. Please try again.";
20
+ let e;
21
+ r[0] !== n ? (e = /* @__PURE__ */ m(p, { children: n }), r[0] = n, r[1] = e) : e = r[1];
22
+ let i;
23
+ return r[2] !== s || r[3] !== e ? (i = /* @__PURE__ */ u(x, { severity: "error", children: [
24
+ e,
25
+ s
26
+ ] }), r[2] = s, r[3] = e, r[4] = i) : i = r[4], i;
27
+ }
28
+ return c;
29
+ }
30
+ function F(t) {
31
+ return {
32
+ isLoading: t?.isLoading,
33
+ isFetching: t?.isFetching,
34
+ error: t?.error
35
+ };
36
+ }
2
37
  export {
3
- e as WidgetError
38
+ P as WidgetError
4
39
  };
5
40
  //# sourceMappingURL=error.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"error.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
1
+ {"version":3,"file":"error.js","sources":["../../src/widgets/error/error.tsx"],"sourcesContent":["import { Alert, AlertTitle } from '@mui/material'\nimport { useWidgetSelector } from '../stores/use-widget-selector'\nimport type { WidgetErrorProps } from './types'\n\n/**\n * Displays an error alert when a widget encounters an error during data loading. Reads error state from the widget store and hides errors during loading/fetching to prevent flashing.\n *\n * @example\n * ```tsx\n * <WidgetError id=\"my-widget\">\n * <WidgetContent />\n * </WidgetError>\n * ```\n */\nexport function WidgetError({\n id,\n children,\n title: titleProp,\n description,\n}: WidgetErrorProps) {\n // Single consolidated subscription instead of 3 separate ones.\n const { isLoading, isFetching, error } = useWidgetSelector(id, (w) => ({\n isLoading: w?.isLoading,\n isFetching: w?.isFetching,\n error: w?.error,\n }))\n\n // Don't show error during loading/fetching states\n if (isLoading || isFetching) {\n return children\n }\n\n // Show error UI if error exists\n if (error) {\n const errorTitle = titleProp ?? error.title ?? 'Error'\n const errorMessage =\n description ??\n error.message ??\n 'An error occurred while loading the widget. Please try again.'\n\n return (\n <Alert severity='error'>\n <AlertTitle>{errorTitle}</AlertTitle>\n {errorMessage}\n </Alert>\n )\n }\n\n // No error, render children\n return children\n}\n"],"names":["WidgetError","t0","$","_c","id","children","title","titleProp","description","isLoading","isFetching","error","useWidgetSelector","_temp","errorTitle","errorMessage","message","t1","AlertTitle","t2","jsxs","Alert","w"],"mappings":";;;;AAcO,SAAAA,EAAAC,GAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA,GAAqB;AAAA,IAAAC,IAAAA;AAAAA,IAAAC,UAAAA;AAAAA,IAAAC,OAAAC;AAAAA,IAAAC,aAAAA;AAAAA,EAAAA,IAAAP,GAO1B;AAAA,IAAAQ,WAAAA;AAAAA,IAAAC,YAAAA;AAAAA,IAAAC,OAAAA;AAAAA,EAAAA,IAAyCC,EAAkBR,GAAIS,CAI7D;AAGF,MAAIJ,KAAAC;AAAuB,WAClBL;AAIT,MAAIM,GAAK;AACP,UAAAG,IAAmBP,KAAaI,EAAKL,SAAlB,SACnBS,IACEP,KACAG,EAAKK,WADL;AAE+D,QAAAC;AAAA,IAAAf,SAAAY,KAI7DG,sBAACC,kBAAuB,GAAahB,OAAAY,GAAAZ,OAAAe,KAAAA,IAAAf,EAAA,CAAA;AAAA,QAAAiB;AAAA,WAAAjB,EAAA,CAAA,MAAAa,KAAAb,SAAAe,KADvCE,IAAA,gBAAAC,EAACC,GAAA,EAAe,UAAA,SACdJ,UAAAA;AAAAA,MAAAA;AAAAA,MACCF;AAAAA,IAAAA,GACH,GAAQb,OAAAa,GAAAb,OAAAe,GAAAf,OAAAiB,KAAAA,IAAAjB,EAAA,CAAA,GAHRiB;AAAAA,EAGQ;AAEX,SAGMd;AAAQ;AAnCV,SAAAQ,EAAAS,GAAA;AAAA,SAOkE;AAAA,IAAAb,WAC1Da,GAACb;AAAAA,IAAWC,YACXY,GAACZ;AAAAA,IAAYC,OAClBW,GAACX;AAAAA,EAAAA;AACT;"}
@@ -1,11 +1,11 @@
1
- import { I as y, S as F, P as I, a as D } from "../series-Bola3CmD.js";
1
+ import { I as y, S as F, P as I, a as D } from "../series-DLNHDWs0.js";
2
2
  import { jsx as f, jsxs as P, Fragment as k } from "react/jsx-runtime";
3
3
  import { c as g } from "react/compiler-runtime";
4
4
  import { d as C } from "../formatter-B9Bxn1k7.js";
5
- import { u as R } from "../use-widget-selector-DqRmWQ1K.js";
6
- import { R as T, s as $ } from "../row-D4VOhcNI.js";
5
+ import { u as R } from "../use-widget-selector-DFl2hW0R.js";
6
+ import { R as T, s as $ } from "../row-DZSP99LW.js";
7
7
  import { Box as v, Skeleton as b } from "@mui/material";
8
- import "../widget-store-CIrb9RKP.js";
8
+ import "../widget-store-Bw5zRUGg.js";
9
9
  import "zustand/shallow";
10
10
  import "@mui/icons-material";
11
11
  import "react";
@@ -15,7 +15,7 @@ import "../cjs-D4KH3azB.js";
15
15
  import "@dnd-kit/core";
16
16
  import "@dnd-kit/sortable";
17
17
  import "@dnd-kit/utilities";
18
- import { u as j } from "../use-widget-ref-BFazQvJK.js";
18
+ import { u as j } from "../use-widget-ref-Ddr_SlJJ.js";
19
19
  function z(t) {
20
20
  const e = g(15);
21
21
  let r, i, o;
@@ -2,7 +2,7 @@ import { jsx as m, jsxs as _ } from "react/jsx-runtime";
2
2
  import { c as L } from "react/compiler-runtime";
3
3
  import "react";
4
4
  import "echarts";
5
- import "../widget-store-CIrb9RKP.js";
5
+ import "../widget-store-Bw5zRUGg.js";
6
6
  import "zustand/shallow";
7
7
  import { g as k } from "../options-D9wflre6.js";
8
8
  import { m as C } from "../utils-BOhInag6.js";
@@ -1,6 +1,6 @@
1
1
  import { c as W } from "react/compiler-runtime";
2
2
  import { useRef as x, useEffect as n } from "react";
3
- import { u as w, w as y } from "../widget-store-CIrb9RKP.js";
3
+ import { u as w, w as y } from "../widget-store-Bw5zRUGg.js";
4
4
  import { d as A } from "../cjs-D4KH3azB.js";
5
5
  function v(e) {
6
6
  const i = W(25);
@@ -1,9 +1,9 @@
1
1
  import { jsx as r, jsxs as h } from "react/jsx-runtime";
2
2
  import { c as s } from "react/compiler-runtime";
3
- import { u as f } from "../use-widget-selector-DqRmWQ1K.js";
3
+ import { u as f } from "../use-widget-selector-DFl2hW0R.js";
4
4
  import { ListItem as u, List as d, Link as g, Typography as m, Skeleton as a, Box as w } from "@mui/material";
5
5
  import k from "react-markdown";
6
- import "../widget-store-CIrb9RKP.js";
6
+ import "../widget-store-Bw5zRUGg.js";
7
7
  import "@mui/icons-material";
8
8
  import "react";
9
9
  import "html2canvas";
@@ -1,5 +1,61 @@
1
- import { W as t } from "../no-data-DkIt7Qt1.js";
1
+ import { jsx as u, jsxs as x } from "react/jsx-runtime";
2
+ import { c as v } from "react/compiler-runtime";
3
+ import { Typography as d, Box as b } from "@mui/material";
4
+ import { u as j } from "../use-widget-selector-DFl2hW0R.js";
5
+ const D = {
6
+ root: {
7
+ display: "flex",
8
+ flexDirection: "column",
9
+ gap: 1,
10
+ // 8px
11
+ paddingTop: 1,
12
+ // 8px
13
+ paddingBottom: 2,
14
+ // 16px
15
+ paddingX: 2,
16
+ // 16px
17
+ width: "100%",
18
+ minHeight: "100%"
19
+ }
20
+ };
21
+ function B(e) {
22
+ const t = v(7), {
23
+ id: p,
24
+ children: a,
25
+ title: l,
26
+ description: c,
27
+ isEmpty: f
28
+ } = e, n = l === void 0 ? "No data available" : l, s = c === void 0 ? "There are no results for the combination of filters applied to your data. Try tweaking your filters, or zoom and pan the map to adjust filters" : c, y = f === void 0 ? T : f, {
29
+ isLoading: g,
30
+ isFetching: m,
31
+ sourceData: h
32
+ } = j(p, A);
33
+ if (g || m)
34
+ return a;
35
+ if (y(h)) {
36
+ let r;
37
+ t[0] !== n ? (r = /* @__PURE__ */ u(d, { variant: "body2", color: "text.primary", children: n }), t[0] = n, t[1] = r) : r = t[1];
38
+ let i;
39
+ t[2] !== s ? (i = /* @__PURE__ */ u(d, { variant: "caption", color: "text.secondary", children: s }), t[2] = s, t[3] = i) : i = t[3];
40
+ let o;
41
+ return t[4] !== r || t[5] !== i ? (o = /* @__PURE__ */ x(b, { sx: D.root, children: [
42
+ r,
43
+ i
44
+ ] }), t[4] = r, t[5] = i, t[6] = o) : o = t[6], o;
45
+ }
46
+ return a;
47
+ }
48
+ function A(e) {
49
+ return {
50
+ isLoading: e?.isLoading,
51
+ isFetching: e?.isFetching,
52
+ sourceData: e?.sourceData
53
+ };
54
+ }
55
+ function T(e) {
56
+ return e == null ? !0 : Array.isArray(e) ? !!(e.length === 0 || e.every((t) => Array.isArray(t) && t.length === 0)) : typeof e == "object" ? Object.keys(e).length === 0 : !1;
57
+ }
2
58
  export {
3
- t as WidgetNoData
59
+ B as WidgetNoData
4
60
  };
5
61
  //# sourceMappingURL=no-data.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"no-data.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
1
+ {"version":3,"file":"no-data.js","sources":["../../src/widgets/no-data/style.ts","../../src/widgets/no-data/no-data.tsx"],"sourcesContent":["import type { SxProps, Theme } from '@mui/material'\n\n/**\n * Styles for NoData component matching Figma design specifications\n * Design reference: node 5781-11028\n */\nexport const styles: Record<string, SxProps<Theme>> = {\n root: {\n display: 'flex',\n flexDirection: 'column',\n gap: 1, // 8px\n paddingTop: 1, // 8px\n paddingBottom: 2, // 16px\n paddingX: 2, // 16px\n width: '100%',\n minHeight: '100%',\n },\n}\n","import { Box, Typography } from '@mui/material'\nimport { useWidgetSelector } from '../stores/use-widget-selector'\nimport type { WidgetNoDataProps } from './types'\nimport { styles } from './style'\n\n/**\n * NoData wrapper component that displays empty state UI when widget has no data\n *\n * Integrates with widget store to check loading/fetching state and source data availability.\n * Uses `sourceData` (pre-pipeline data) instead of `data` (post-pipeline) to distinguish\n * \"API returned nothing\" from \"pipeline tools filtered everything out\".\n *\n * @example Basic usage\n * ```tsx\n * <NoData id=\"my-widget\">\n * <WidgetContent id=\"my-widget\" />\n * </NoData>\n * ```\n *\n * @example With SkeletonLoader\n * ```tsx\n * <SkeletonLoader id=\"my-widget\" Skeleton={MySkeleton}>\n * <NoData id=\"my-widget\">\n * <WidgetContent id=\"my-widget\" />\n * </NoData>\n * </SkeletonLoader>\n * ```\n *\n * @example With custom messages\n * ```tsx\n * <NoData\n * id=\"my-widget\"\n * title=\"No results found\"\n * description=\"Try adjusting your filters\"\n * >\n * <WidgetContent id=\"my-widget\" />\n * </NoData>\n * ```\n */\nexport function WidgetNoData({\n id,\n children,\n title = 'No data available',\n description = 'There are no results for the combination of filters applied to your data. Try tweaking your filters, or zoom and pan the map to adjust filters',\n isEmpty = defaultIsEmpty,\n}: WidgetNoDataProps) {\n // Single consolidated subscription instead of 3 separate ones.\n // Reads sourceData (pre-pipeline) to check emptiness, not data (post-pipeline).\n const { isLoading, isFetching, sourceData } = useWidgetSelector(id, (w) => ({\n isLoading: w?.isLoading,\n isFetching: w?.isFetching,\n sourceData: w?.sourceData,\n }))\n\n // If loading or fetching, show children\n // SkeletonLoader handles loading state, this allows proper composition\n if (isLoading || isFetching) {\n return children\n }\n\n // Check if data is empty\n if (isEmpty(sourceData)) {\n return (\n <Box sx={styles.root}>\n <Typography variant='body2' color='text.primary'>\n {title}\n </Typography>\n <Typography variant='caption' color='text.secondary'>\n {description}\n </Typography>\n </Box>\n )\n }\n\n // Data exists, render children\n return children\n}\n\n/**\n * Default function to determine if data is empty\n * Handles various data structures commonly used in widgets\n */\nfunction defaultIsEmpty(data: unknown): boolean {\n // Null or undefined\n if (data == null) {\n return true\n }\n\n // Arrays (most common case)\n if (Array.isArray(data)) {\n // Empty array\n if (data.length === 0) {\n return true\n }\n\n // Array of arrays (CategoryWidget pattern: [[],[]])\n // Check if all inner arrays are empty\n if (data.every((item) => Array.isArray(item) && item.length === 0)) {\n return true\n }\n\n return false\n }\n\n // Objects\n if (typeof data === 'object') {\n return Object.keys(data).length === 0\n }\n\n // Primitives (numbers, strings, booleans) are considered valid data\n return false\n}\n"],"names":["styles","root","display","flexDirection","gap","paddingTop","paddingBottom","paddingX","width","minHeight","WidgetNoData","t0","$","_c","id","children","title","t1","description","t2","isEmpty","t3","undefined","defaultIsEmpty","isLoading","isFetching","sourceData","useWidgetSelector","_temp","t4","Typography","t5","t6","Box","w","data","Array","isArray","length","every","item","Object","keys"],"mappings":";;;;AAMO,MAAMA,IAAyC;AAAA,EACpDC,MAAM;AAAA,IACJC,SAAS;AAAA,IACTC,eAAe;AAAA,IACfC,KAAK;AAAA;AAAA,IACLC,YAAY;AAAA;AAAA,IACZC,eAAe;AAAA;AAAA,IACfC,UAAU;AAAA;AAAA,IACVC,OAAO;AAAA,IACPC,WAAW;AAAA,EAAA;AAEf;ACsBO,SAAAC,EAAAC,GAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA,GAAsB;AAAA,IAAAC,IAAAA;AAAAA,IAAAC,UAAAA;AAAAA,IAAAC,OAAAC;AAAAA,IAAAC,aAAAC;AAAAA,IAAAC,SAAAC;AAAAA,EAAAA,IAAAV,GAG3BK,IAAAC,MAAAK,SAAA,sBAAAL,GACAC,IAAAC,MAAAG,SAAA,mJAAAH,GACAC,IAAAC,MAAAC,SAAAC,IAAAF,GAIA;AAAA,IAAAG,WAAAA;AAAAA,IAAAC,YAAAA;AAAAA,IAAAC,YAAAA;AAAAA,EAAAA,IAA8CC,EAAkBb,GAAIc,CAIlE;AAIF,MAAIJ,KAAAC;AAAuB,WAClBV;AAIT,MAAIK,EAAQM,CAAU,GAAC;AAAA,QAAAG;AAAA,IAAAjB,SAAAI,KAGjBa,sBAACC,GAAA,EAAmB,SAAA,SAAc,OAAA,gBAC/Bd,UAAAA,GACH,GAAaJ,OAAAI,GAAAJ,OAAAiB,KAAAA,IAAAjB,EAAA,CAAA;AAAA,QAAAmB;AAAA,IAAAnB,SAAAM,KACba,sBAACD,GAAA,EAAmB,SAAA,WAAgB,OAAA,kBACjCZ,UAAAA,GACH,GAAaN,OAAAM,GAAAN,OAAAmB,KAAAA,IAAAnB,EAAA,CAAA;AAAA,QAAAoB;AAAA,WAAApB,EAAA,CAAA,MAAAiB,KAAAjB,SAAAmB,KANfC,sBAACC,GAAA,EAAQ,IAAAjC,EAAMC,MACb4B,UAAAA;AAAAA,MAAAA;AAAAA,MAGAE;AAAAA,IAAAA,GAGF,GAAMnB,OAAAiB,GAAAjB,OAAAmB,GAAAnB,OAAAoB,KAAAA,IAAApB,EAAA,CAAA,GAPNoB;AAAAA,EAOM;AAET,SAGMjB;AAAQ;AApCV,SAAAa,EAAAM,GAAA;AAAA,SASuE;AAAA,IAAAV,WAC/DU,GAACV;AAAAA,IAAWC,YACXS,GAACT;AAAAA,IAAYC,YACbQ,GAACR;AAAAA,EAAAA;AACd;AA8BH,SAASH,EAAeY,GAAwB;AAE9C,SAAIA,KAAQ,OACH,KAILC,MAAMC,QAAQF,CAAI,IAEhBA,GAAAA,EAAKG,WAAW,KAMhBH,EAAKI,MAAOC,CAAAA,MAASJ,MAAMC,QAAQG,CAAI,KAAKA,EAAKF,WAAW,CAAC,KAQ/D,OAAOH,KAAS,WACXM,OAAOC,KAAKP,CAAI,EAAEG,WAAW,IAI/B;AACT;"}
@@ -1,5 +1,124 @@
1
- import { W as t } from "../note-t51drNe0.js";
1
+ import { jsx as p, jsxs as N } from "react/jsx-runtime";
2
+ import { c as R } from "react/compiler-runtime";
3
+ import { useState as _, useRef as j, useEffectEvent as z, useEffect as M } from "react";
4
+ import { Button as F, Box as W, Link as H, Typography as P } from "@mui/material";
5
+ import U from "react-markdown";
6
+ const L = {
7
+ root: {
8
+ typography: "caption",
9
+ color: (n) => n.palette.text.secondary,
10
+ marginBlockStart: ({
11
+ spacing: n
12
+ }) => n(1)
13
+ },
14
+ clamped: {
15
+ display: "-webkit-box",
16
+ WebkitLineClamp: 3,
17
+ WebkitBoxOrient: "vertical",
18
+ overflow: "hidden"
19
+ },
20
+ expanded: {
21
+ display: "block"
22
+ },
23
+ linkButton: {
24
+ padding: 0,
25
+ minWidth: "auto",
26
+ textTransform: "none",
27
+ typography: "caption",
28
+ fontWeight: 500,
29
+ textDecoration: "none",
30
+ "&:hover": {
31
+ backgroundColor: "transparent"
32
+ }
33
+ }
34
+ }, C = {
35
+ showMore: "Show More",
36
+ showLess: "Show Less"
37
+ }, l = (n) => {
38
+ const e = R(2), {
39
+ children: t
40
+ } = n;
41
+ let r;
42
+ return e[0] !== t ? (r = /* @__PURE__ */ p(P, { paragraph: !0, color: "inherit", variant: "caption", children: t }), e[0] = t, e[1] = r) : r = e[1], r;
43
+ }, $ = {
44
+ h1: l,
45
+ h2: l,
46
+ h3: l,
47
+ p: l,
48
+ a: ({
49
+ children: n,
50
+ href: e,
51
+ target: t = "_blank",
52
+ rel: r = "noopener noreferrer"
53
+ }) => /* @__PURE__ */ p(H, { href: e, target: t, rel: r, color: "text.primary", underline: "always", children: n }),
54
+ img: () => null,
55
+ ul: l,
56
+ ol: l,
57
+ li: l
58
+ };
59
+ function Q(n) {
60
+ const e = R(27), {
61
+ children: t,
62
+ labels: r
63
+ } = n, S = r === void 0 ? C : r, [o, A] = _(!1), [E, D] = _(!1), h = j(null);
64
+ let m;
65
+ e[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (m = () => {
66
+ if (h.current) {
67
+ const v = h.current.scrollHeight > h.current.clientHeight;
68
+ D(v);
69
+ }
70
+ }, e[0] = m) : m = e[0];
71
+ const s = z(m);
72
+ let u;
73
+ e[1] !== s ? (u = () => {
74
+ s();
75
+ }, e[1] = s, e[2] = u) : u = e[2];
76
+ let g;
77
+ e[3] !== t ? (g = [t], e[3] = t, e[4] = g) : g = e[4], M(u, g);
78
+ let x;
79
+ e[5] !== s ? (x = () => {
80
+ const v = h.current;
81
+ if (!v)
82
+ return;
83
+ const O = new ResizeObserver(() => {
84
+ s();
85
+ });
86
+ return O.observe(v), () => {
87
+ O.disconnect();
88
+ };
89
+ }, e[5] = s, e[6] = x) : x = e[6];
90
+ let w;
91
+ if (e[7] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (w = [], e[7] = w) : w = e[7], M(x, w), !t)
92
+ return null;
93
+ let b;
94
+ e[8] !== o ? (b = () => {
95
+ A(!o);
96
+ }, e[8] = o, e[9] = b) : b = e[9];
97
+ const T = b;
98
+ let y;
99
+ e[10] !== S ? (y = {
100
+ ...C,
101
+ ...S
102
+ }, e[10] = S, e[11] = y) : y = e[11];
103
+ const i = y, B = o ? L.expanded : L.clamped;
104
+ let c;
105
+ e[12] !== B ? (c = {
106
+ ...L.root,
107
+ ...B
108
+ }, e[12] = B, e[13] = c) : c = e[13];
109
+ let a;
110
+ e[14] !== t ? (a = /* @__PURE__ */ p(U, { components: $, children: t }), e[14] = t, e[15] = a) : a = e[15];
111
+ let f;
112
+ e[16] !== c || e[17] !== a ? (f = /* @__PURE__ */ p(W, { ref: h, sx: c, children: a }), e[16] = c, e[17] = a, e[18] = f) : f = e[18];
113
+ let d;
114
+ e[19] !== T || e[20] !== o || e[21] !== i || e[22] !== E ? (d = (E || o) && /* @__PURE__ */ p(F, { onClick: T, variant: "text", color: "primary", sx: L.linkButton, "aria-expanded": o, "aria-label": o ? i.showLess : i.showMore, "aria-controls": "note-content", children: o ? i.showLess : i.showMore }), e[19] = T, e[20] = o, e[21] = i, e[22] = E, e[23] = d) : d = e[23];
115
+ let k;
116
+ return e[24] !== f || e[25] !== d ? (k = /* @__PURE__ */ N(W, { children: [
117
+ f,
118
+ d
119
+ ] }), e[24] = f, e[25] = d, e[26] = k) : k = e[26], k;
120
+ }
2
121
  export {
3
- t as WidgetNote
122
+ Q as WidgetNote
4
123
  };
5
124
  //# sourceMappingURL=note.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"note.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
1
+ {"version":3,"file":"note.js","sources":["../../src/widgets/note/style.ts","../../src/widgets/note/note.tsx"],"sourcesContent":["import type { SxProps, Theme } from '@mui/material'\n\nexport const styles = {\n root: {\n typography: 'caption',\n color: (theme: Theme) => theme.palette.text.secondary,\n marginBlockStart: ({ spacing }) => spacing(1),\n },\n clamped: {\n display: '-webkit-box',\n WebkitLineClamp: 3,\n WebkitBoxOrient: 'vertical',\n overflow: 'hidden',\n },\n expanded: {\n display: 'block',\n },\n linkButton: {\n padding: 0,\n minWidth: 'auto',\n textTransform: 'none',\n typography: 'caption',\n fontWeight: 500,\n textDecoration: 'none',\n '&:hover': {\n backgroundColor: 'transparent',\n },\n },\n} satisfies Record<string, SxProps<Theme>>\n","import { useState, useEffect, useRef, useEffectEvent } from 'react'\nimport { Box, Button, Link, Typography } from '@mui/material'\nimport type { WidgetNoteProps } from './types'\nimport { styles } from './style'\nimport ReactMarkdown, { type Components } from 'react-markdown'\n\nconst DEFAULT_LABELS = {\n showMore: 'Show More',\n showLess: 'Show Less',\n} as const\n\nconst DEFAULT_P = ({ children }: { children?: React.ReactNode }) => (\n <Typography paragraph color='inherit' variant='caption'>\n {children}\n </Typography>\n)\n\nconst COMPONENTS: Components = {\n h1: DEFAULT_P,\n h2: DEFAULT_P,\n h3: DEFAULT_P,\n p: DEFAULT_P,\n a: ({ children, href, target = '_blank', rel = 'noopener noreferrer' }) => (\n <Link\n href={href}\n target={target}\n rel={rel}\n color='text.primary'\n underline='always'\n >\n {children}\n </Link>\n ),\n img: () => null,\n ul: DEFAULT_P,\n ol: DEFAULT_P,\n li: DEFAULT_P,\n}\n\n/**\n * Displays text content with markdown support and automatic show more/less functionality for long content. Automatically detects content exceeding 3 lines and shows an expand/collapse button.\n *\n * @example\n * ```tsx\n * <WidgetNote>\n * {\"**Important:** This data is from Q4 2024.\"}\n * </WidgetNote>\n * ```\n */\nexport function WidgetNote({\n children,\n labels = DEFAULT_LABELS,\n}: WidgetNoteProps) {\n const [isExpanded, setIsExpanded] = useState(false)\n const [shouldShowToggle, setShouldShowToggle] = useState(false)\n const contentRef = useRef<HTMLDivElement>(null)\n\n const checkOverflow = useEffectEvent(() => {\n if (contentRef.current) {\n // Check if content overflows 3 lines\n const isOverflowing =\n contentRef.current.scrollHeight > contentRef.current.clientHeight\n setShouldShowToggle(isOverflowing)\n }\n })\n\n useEffect(() => {\n checkOverflow()\n }, [children])\n\n useEffect(() => {\n const element = contentRef.current\n if (!element) return\n\n const resizeObserver = new ResizeObserver(() => {\n checkOverflow()\n })\n\n resizeObserver.observe(element)\n\n return () => {\n resizeObserver.disconnect()\n }\n }, [])\n\n if (!children) {\n return null\n }\n\n const handleToggle = () => {\n setIsExpanded(!isExpanded)\n }\n\n const mergedLabels = { ...DEFAULT_LABELS, ...labels }\n\n return (\n <Box>\n <Box\n ref={contentRef}\n sx={{\n ...styles.root,\n ...(isExpanded ? styles.expanded : styles.clamped),\n }}\n >\n <ReactMarkdown components={COMPONENTS}>{children}</ReactMarkdown>\n </Box>\n {(shouldShowToggle || isExpanded) && (\n <Button\n onClick={handleToggle}\n variant='text'\n color='primary'\n sx={styles.linkButton}\n aria-expanded={isExpanded}\n aria-label={\n isExpanded ? mergedLabels.showLess : mergedLabels.showMore\n }\n aria-controls='note-content'\n >\n {isExpanded ? mergedLabels.showLess : mergedLabels.showMore}\n </Button>\n )}\n </Box>\n )\n}\n"],"names":["styles","root","typography","color","theme","palette","text","secondary","marginBlockStart","spacing","clamped","display","WebkitLineClamp","WebkitBoxOrient","overflow","expanded","linkButton","padding","minWidth","textTransform","fontWeight","textDecoration","backgroundColor","DEFAULT_LABELS","showMore","showLess","DEFAULT_P","t0","$","_c","children","t1","jsx","Typography","COMPONENTS","h1","h2","h3","p","a","href","target","rel","Link","img","ul","ol","li","WidgetNote","labels","undefined","isExpanded","setIsExpanded","useState","shouldShowToggle","setShouldShowToggle","contentRef","useRef","t2","Symbol","for","current","isOverflowing","scrollHeight","clientHeight","checkOverflow","useEffectEvent","t3","t4","useEffect","t5","element","resizeObserver","ResizeObserver","observe","disconnect","t6","t7","handleToggle","t8","mergedLabels","t9","t10","t11","ReactMarkdown","t12","Box","t13","Button","t14"],"mappings":"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"}
@@ -2,11 +2,11 @@ import { jsxs as x, jsx as p } from "react/jsx-runtime";
2
2
  import { c as C } from "react/compiler-runtime";
3
3
  import "react";
4
4
  import "echarts";
5
- import "../widget-store-CIrb9RKP.js";
5
+ import "../widget-store-Bw5zRUGg.js";
6
6
  import "zustand/shallow";
7
7
  import { g as L } from "../options-D9wflre6.js";
8
8
  import { m as N } from "../utils-BOhInag6.js";
9
- import { c as j, f as A } from "../download-config-DemuQ3Jm.js";
9
+ import { c as j, f as A } from "../download-config-C3I0jWIL.js";
10
10
  import { g as b, h as O, n as v, d as S, e as _, c as T } from "../styles-Y8q7Jff3.js";
11
11
  import { Box as h, Skeleton as f } from "@mui/material";
12
12
  const Y = j(A);
@@ -1,10 +1,10 @@
1
1
  import { jsx as u, jsxs as z } from "react/jsx-runtime";
2
2
  import { c as P } from "react/compiler-runtime";
3
- import { R as X } from "../row-D4VOhcNI.js";
3
+ import { R as X } from "../row-DZSP99LW.js";
4
4
  import { Box as B, Slider as Y, TextField as Z, Skeleton as q } from "@mui/material";
5
5
  import { useState as J } from "react";
6
- import { w as V } from "../widget-store-CIrb9RKP.js";
7
- import { u as ee } from "../use-widget-selector-DqRmWQ1K.js";
6
+ import { w as V } from "../widget-store-Bw5zRUGg.js";
7
+ import { u as ee } from "../use-widget-selector-DFl2hW0R.js";
8
8
  import { d as te } from "../formatter-B9Bxn1k7.js";
9
9
  const y = {
10
10
  rangeItem: {
@@ -2,11 +2,11 @@ import { jsxs as g, jsx as i } from "react/jsx-runtime";
2
2
  import { c as h } from "react/compiler-runtime";
3
3
  import "react";
4
4
  import "echarts";
5
- import "../widget-store-CIrb9RKP.js";
5
+ import "../widget-store-Bw5zRUGg.js";
6
6
  import "zustand/shallow";
7
7
  import { g as b } from "../options-D9wflre6.js";
8
8
  import { m as S } from "../utils-BOhInag6.js";
9
- import { c as v, s as k } from "../download-config-DemuQ3Jm.js";
9
+ import { c as v, s as k } from "../download-config-C3I0jWIL.js";
10
10
  import { g as w, b as L, a as I, e as _, c as A } from "../styles-Y8q7Jff3.js";
11
11
  import { Box as p, Skeleton as c } from "@mui/material";
12
12
  const X = v(k);
@@ -1,6 +1,6 @@
1
1
  import { jsx as t } from "react/jsx-runtime";
2
2
  import { c as s } from "react/compiler-runtime";
3
- import { u } from "../use-widget-selector-DqRmWQ1K.js";
3
+ import { u } from "../use-widget-selector-DFl2hW0R.js";
4
4
  import { Suspense as c } from "react";
5
5
  function L(r) {
6
6
  const e = s(2), {
@@ -1,12 +1,12 @@
1
1
  import { jsx as s, jsxs as M, Fragment as _ } from "react/jsx-runtime";
2
2
  import { c as g } from "react/compiler-runtime";
3
- import { I as w, S as k, P as C, a as R } from "../series-Bola3CmD.js";
4
- import { u as T } from "../use-widget-selector-DqRmWQ1K.js";
3
+ import { I as w, S as k, P as C, a as R } from "../series-DLNHDWs0.js";
4
+ import { u as T } from "../use-widget-selector-DFl2hW0R.js";
5
5
  import { d as $ } from "../formatter-B9Bxn1k7.js";
6
6
  import { Box as I, Skeleton as V } from "@mui/material";
7
- import "../widget-store-CIrb9RKP.js";
7
+ import "../widget-store-Bw5zRUGg.js";
8
8
  import "zustand/shallow";
9
- import { R as b } from "../row-D4VOhcNI.js";
9
+ import { R as b } from "../row-DZSP99LW.js";
10
10
  import "@mui/icons-material";
11
11
  import "react";
12
12
  import "html2canvas";
@@ -15,7 +15,7 @@ import "../cjs-D4KH3azB.js";
15
15
  import "@dnd-kit/core";
16
16
  import "@dnd-kit/sortable";
17
17
  import "@dnd-kit/utilities";
18
- import { u as j } from "../use-widget-ref-BFazQvJK.js";
18
+ import { u as j } from "../use-widget-ref-Ddr_SlJJ.js";
19
19
  import { d as y, a as P } from "../exports-Cr43OCul.js";
20
20
  function v(e) {
21
21
  const t = g(2);