@spteck/fluentui-react-charts 1.0.3 → 1.0.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":"fluentui-react-charts.cjs.production.min.js","sources":["../src/components/legendeButton/LegendButton.tsx","../src/components/stack/Stack.tsx","../src/components/legendContainer/LegendContainer.tsx","../src/hooks/useResponsiveLegend.ts","../src/components/RenderLegend/RenderLegend.tsx","../src/graphGlobalStyles/useGraphGlobalStyles.ts","../src/charts/areaChart/AreaChart.tsx","../src/charts/barHorizontalChart/BarHotizontalChart.tsx","../src/charts/bubbleChart/BubbleChart.tsx","../src/charts/ComboChart/ComboChart.tsx","../src/components/renderValueLegend/RenderValueLegend.tsx","../src/charts/Doughnut/DoughnutChart.tsx","../src/charts/floatBarChart/FloatBarChart.tsx","../src/charts/lineChart/LineChart.tsx","../src/charts/PieChart/PieChart.tsx","../src/components/renderSliceLegend/RenderSliceLegend.tsx","../src/charts/polarChart/PolarChart.tsx","../src/charts/radarChart/RadarChart.tsx","../src/charts/scatterChart/ScatterChart.tsx","../src/charts/stackedLineChart/StackedLineChart.tsx","../src/charts/steamChart/SteamChart.tsx","../src/hooks/useGraphUtils.tsx","../src/charts/BarChart/BarChart.tsx","../src/components/svgImages/BusinessReportIcon.tsx","../src/components/dashboard/NoDashboards.tsx","../src/components/RenderLabel/useRenderLabelStylesStyles.ts","../src/components/RenderLabel/RenderLabel.tsx","../src/components/dashboard/selectZoom/SelectZoom.tsx","../src/components/dashboard/DashBoard.tsx","../src/components/dashboard/useDashboardStyles.ts"],"sourcesContent":["// LegendButton.tsx\nimport { Button, Caption1, Tooltip, tokens } from '@fluentui/react-components';\n\nimport React from 'react';\n\ninterface LegendButtonProps {\n label: string;\n isVisible: boolean;\n color: string;\n onClick: () => void;\n style?: React.CSSProperties;\n buttonRef?: React.Ref<HTMLButtonElement>;\n}\n\nexport const LegendButton: React.FC<LegendButtonProps> = ({\n label,\n isVisible,\n color,\n onClick,\n style = {},\n buttonRef,\n}) => {\n return (\n <Tooltip content={label} relationship=\"label\">\n <Button\n ref={buttonRef}\n shape=\"circular\"\n size=\"small\"\n appearance={isVisible ? 'primary' : 'outline'}\n onClick={onClick}\n style={{\n backgroundColor: isVisible ? color : 'transparent',\n color: isVisible ? '#fff' : tokens.colorNeutralForeground1,\n borderColor: color,\n borderWidth: 1,\n width: '100px',\n padding: '4px 8px',\n textAlign: 'center',\n ...style,\n }}\n >\n <Caption1\n as=\"span\"\n style={{\n display: 'block',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n lineHeight: '1.25',\n }}\n >\n {label}\n </Caption1>\n </Button>\n </Tooltip>\n );\n};\n","import { mergeClasses, tokens } from \"@fluentui/react-components\";\n\nimport { IStackProps } from \"./IStackProps\";\nimport React from \"react\";\nimport { css } from \"@emotion/css\";\n\n/**\n * Mapping of predefined sizes to Fluent UI tokens.\n */\nconst sizeMap: Record<string, string> = {\n xs: tokens.spacingHorizontalXS,\n s: tokens.spacingHorizontalS,\n m: tokens.spacingHorizontalM,\n l: tokens.spacingHorizontalL,\n xl: tokens.spacingHorizontalXL,\n xxl: tokens.spacingHorizontalXXL,\n};\n\n/**\n * Stack component provides a flexible layout using Flexbox.\n * It allows stacking child components either horizontally or vertically with predefined spacing options.\n */\nexport const Stack: React.FC<IStackProps> = React.memo(\n ({\n direction = \"vertical\",\n justifyContent = \"flex-start\",\n alignItems = \"stretch\",\n gap,\n columnGap,\n rowGap,\n margin,\n padding,\n marginTop,\n marginBottom,\n marginLeft,\n marginRight,\n paddingTop,\n paddingBottom,\n paddingLeft,\n paddingRight,\n width,\n height,\n wrap = false,\n children,\n style,\n className,\n overflow,\n background\n }) => {\n const stackStyle = css({\n display: \"flex\",\n flexDirection: direction === \"horizontal\" ? \"row\" : \"column\",\n justifyContent,\n alignItems,\n gap: gap && sizeMap[gap] ? sizeMap[gap] : gap,\n columnGap:\n columnGap && sizeMap[columnGap] ? sizeMap[columnGap] : columnGap,\n rowGap: rowGap && sizeMap[rowGap] ? sizeMap[rowGap] : rowGap,\n margin: margin && sizeMap[margin] ? sizeMap[margin] : margin,\n padding: padding && sizeMap[padding] ? sizeMap[padding] : padding,\n marginTop:\n marginTop && sizeMap[marginTop] ? sizeMap[marginTop] : marginTop,\n marginBottom:\n marginBottom && sizeMap[marginBottom]\n ? sizeMap[marginBottom]\n : marginBottom,\n marginLeft:\n marginLeft && sizeMap[marginLeft] ? sizeMap[marginLeft] : marginLeft,\n marginRight:\n marginRight && sizeMap[marginRight]\n ? sizeMap[marginRight]\n : marginRight,\n paddingTop:\n paddingTop && sizeMap[paddingTop] ? sizeMap[paddingTop] : paddingTop,\n paddingBottom:\n paddingBottom && sizeMap[paddingBottom]\n ? sizeMap[paddingBottom]\n : paddingBottom,\n paddingLeft:\n paddingLeft && sizeMap[paddingLeft]\n ? sizeMap[paddingLeft]\n : paddingLeft,\n paddingRight:\n paddingRight && sizeMap[paddingRight]\n ? sizeMap[paddingRight]\n : paddingRight,\n width,\n height,\n overflow,\n flexWrap: wrap ? \"wrap\" : \"nowrap\",\n backgroundColor: background,\n ...style,\n });\n\n return (\n <div className={mergeClasses(className, stackStyle)}>{children}</div>\n );\n }\n);\n\nStack.displayName = \"Stack\";\n\nexport default Stack;\n","import {\n Menu,\n MenuButton,\n MenuItem,\n MenuList,\n MenuPopover,\n MenuTrigger,\n} from '@fluentui/react-components';\n\nimport { LegendButton } from '../legendeButton/LegendButton';\nimport React from 'react';\nimport Stack from '../stack/Stack';\nimport { css } from '@emotion/css';\n\ninterface LegendContainerProps<T> {\n items: T[];\n visibleLabels: string[];\n toggleLabel: (label: string) => void;\n renderLabel: (item: T) => string;\n getColor: (item: T) => string;\n}\n\nconst styles = {\n wrapper: css({\n display: 'flex',\n flexWrap: 'nowrap',\n overflow: 'hidden',\n justifyContent: 'center',\n gap: 10,\n padding: 2,\n width: '100%',\n boxSizing: 'border-box',\n }),\n};\n\nexport function LegendContainer<T extends { label: string }>(\n props: LegendContainerProps<T> & {\n containerRef: React.RefObject<HTMLDivElement>;\n \n visibleItems: T[];\n overflowItems: T[];\n }\n) {\n const {\n containerRef,\n \n visibleItems,\n overflowItems,\n visibleLabels,\n toggleLabel,\n renderLabel,\n getColor,\n } = props;\n\n return (\n <Stack\n justifyContent=\"center\"\n alignItems=\"center\"\n marginLeft=\"10px\"\n marginRight=\"10px\"\n marginTop=\"25px\"\n marginBottom=\"20px\"\n >\n <div ref={containerRef} className={styles.wrapper}>\n {visibleItems.map(item => {\n const label = item.label;\n const isVisible =\n visibleLabels.length === 0 || visibleLabels.includes(label);\n return (\n \n <LegendButton\n key={label}\n label={renderLabel(item)}\n color={getColor(item)}\n isVisible={isVisible}\n onClick={() => toggleLabel(label)}\n \n />\n \n );\n })}\n\n {overflowItems.length > 0 && (\n <Menu>\n <MenuTrigger disableButtonEnhancement>\n <MenuButton size=\"small\" appearance=\"transparent\">\n +{overflowItems.length}\n </MenuButton>\n </MenuTrigger>\n <MenuPopover style={{ minWidth: 'fit-content', maxWidth: '200px' }}>\n <MenuList>\n {overflowItems.map(item => {\n const label = item.label;\n const isVisible =\n visibleLabels.length === 0 || visibleLabels.includes(label);\n return (\n <MenuItem key={label} style={{ padding: 0 }}>\n \n <LegendButton\n label={renderLabel(item)}\n color={getColor(item)}\n isVisible={isVisible}\n onClick={() => toggleLabel(label)}\n style={{ width: '100px', textAlign: 'left' }}\n />\n \n \n </MenuItem>\n );\n })}\n </MenuList>\n </MenuPopover>\n </Menu>\n )}\n </div>\n </Stack>\n );\n}\n","import { useEffect, useRef, useState } from 'react';\n\nimport { ResizeObserver } from '@juggle/resize-observer';\nimport { useGraphUtils } from './useGraphUtils';\n\nconst BUTTON_WIDTH = 100;\nconst GAP = 10;\n\nexport function useResponsiveLegend<T extends { label: string }>(items: T[]) {\n const containerRef = useRef<HTMLDivElement>(null);\n const [maxVisible, setMaxVisible] = useState(items.length);\n const { debounce } = useGraphUtils();\n useEffect(() => {\n const measure = () => {\n const containerWidth = containerRef.current?.offsetWidth ?? 0;\n const itemTotalWidth = BUTTON_WIDTH + GAP;\n const count = Math.floor(containerWidth / itemTotalWidth);\n setMaxVisible(count);\n };\n\n const debouncedMeasure = debounce(measure, 100); // debounce resize\n\n const observer = new ResizeObserver(debouncedMeasure);\n if (containerRef.current) observer.observe(containerRef.current);\n measure(); // initial\n\n return () => observer.disconnect();\n }, [items]);\n\n return {\n containerRef,\n visibleItems: items.slice(0, maxVisible),\n overflowItems: items.slice(maxVisible),\n };\n}\n","import { LegendContainer } from '../legendContainer/LegendContainer';\nimport React from 'react';\nimport { useResponsiveLegend } from '../../hooks/useResponsiveLegend';\n\nexport interface LegendControlProps {\n data: { label: string }[];\n visibleSeries: string[];\n seriesColors: Record<string, string>;\n toggleSeries: (label: string) => void;\n}\n\nconst RenderLegend: React.FC<LegendControlProps> = ({\n data,\n visibleSeries,\n seriesColors,\n toggleSeries,\n}) => {\n const {\n containerRef,\n \n visibleItems,\n overflowItems,\n } = useResponsiveLegend(data);\n\n return (\n <LegendContainer\n containerRef={containerRef}\n \n visibleItems={visibleItems}\n overflowItems={overflowItems}\n items={data}\n visibleLabels={visibleSeries}\n toggleLabel={toggleSeries}\n renderLabel={d => d.label}\n getColor={d => seriesColors[d.label]}\n />\n );\n};\n\nexport default RenderLegend;\n","import { css } from \"@emotion/css\";\n\nexport const useGraphGlobalStyles = () => {\n return {\n chartWithLegend: css({\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n chartArea: {\n flexGrow: 1,\n minHeight: 0,\n },\n }),\n chartArea: css`\n flex-grow: 1;\n min-height: 0;\n `,\n legendArea: css`\n margin-top: 0px;\n padding-top: 0px;\n \n margin-Left: 10px;\n margin-Right: 10px;\n \n `,\n };\n \n}","import {\n CategoryScale,\n Chart as ChartJS,\n ChartOptions,\n Filler,\n Legend,\n LineElement,\n LinearScale,\n PointElement,\n Title,\n Tooltip,\n} from 'chart.js';\nimport React, { useMemo, useState } from 'react';\nimport { Theme, webLightTheme } from '@fluentui/react-components';\n\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\nimport { Line } from 'react-chartjs-2';\nimport RenderLegend from '../../components/RenderLegend/RenderLegend';\nimport { useGraphGlobalStyles } from '../../graphGlobalStyles/useGraphGlobalStyles';\nimport { useGraphUtils } from '../../hooks/useGraphUtils';\n\nChartJS.register(\n CategoryScale,\n LinearScale,\n PointElement,\n LineElement,\n Tooltip,\n Filler,\n Legend,\n ChartDataLabels,\n Title\n);\n\nexport interface AreaChartProps<T> {\n data: { label: string; data: T[] }[];\n getPrimary: (datum: T) => string | number;\n getSecondary: (datum: T) => number;\n stacked?: boolean;\n title?: string;\n showDatalabels?: boolean;\n theme?: Theme;\n}\n\nexport default function AreaChart<T extends object>({\n data,\n getPrimary,\n getSecondary,\n title,\n showDatalabels = false,\n theme = webLightTheme,\n stacked = false,\n}: AreaChartProps<T>) {\n const [visibleSeries, setVisibleSeries] = useState(() =>\n data.length > 1 ? data.map(s => s.label) : [data[0]?.label]\n );\n\n const styles = useGraphGlobalStyles();\n const { lightenColor, getFluentPalette, createFluentTooltip } = useGraphUtils(\n theme\n );\n\n const seriesColors = useMemo(() => {\n return data.reduce((acc, series, idx) => {\n const base = getFluentPalette(theme)[\n idx % getFluentPalette(theme).length\n ];\n const color = lightenColor(base, 0.3);\n acc[series.label] = color;\n return acc;\n }, {} as Record<string, string>);\n }, [data, theme]);\n\n const toggleSeries = (label: string) => {\n setVisibleSeries(prev => {\n const isVisible = prev.includes(label);\n const next = isVisible ? prev.filter(l => l !== label) : [...prev, label];\n return next.length === 0 && data.length > 0 ? [data[0].label] : next;\n });\n };\n\n const allCategories = useMemo(() => {\n const set = new Set<string | number>();\n data.forEach(series => {\n series.data.forEach(d => set.add(getPrimary(d)));\n });\n return Array.from(set);\n }, [data, getPrimary]);\n\n const chartData = useMemo(() => {\n return {\n labels: allCategories,\n datasets: data\n .filter(series => visibleSeries.includes(series.label))\n .map(series => ({\n label: series.label,\n data: allCategories.map(cat => {\n const match = series.data.find(d => getPrimary(d) === cat);\n return match ? getSecondary(match) : null;\n }),\n borderColor: seriesColors[series.label],\n backgroundColor: seriesColors[series.label],\n fill: true,\n tension: 0.4,\n pointRadius: 2,\n })),\n };\n }, [\n data,\n visibleSeries,\n allCategories,\n getPrimary,\n getSecondary,\n seriesColors,\n ]);\n\nconst { fontFamily, fontSize, labelColor, gridColor } = useMemo(() => ({\n fontFamily: theme.fontFamilyBase,\n fontSize: parseInt(theme.fontSizeBase200.replace('px', '')) || 14,\n labelColor: theme.colorNeutralForeground1,\n gridColor: theme.colorNeutralStroke2,\n}), [theme]);\n\n const options: ChartOptions<'line'> = useMemo(() => ({\n responsive: true,\n maintainAspectRatio: false,\n plugins: {\n title: {\n display: !!title,\n text: title ,\n font: {\n size: 14,\n family: theme.fontFamilyBase,\n weight: theme.fontWeightSemibold,\n },\n color: theme.colorNeutralForeground1,\n padding: {\n top: 20,\n bottom: 20,\n },\n },\n datalabels: {\n display: showDatalabels,\n color: theme.colorNeutralForeground1,\n font: {\n family: theme.fontFamilyBase,\n size: parseInt(theme.fontSizeBase200.replace('px', '')) || 14,\n },\n },\n legend: { display: false },\n tooltip: createFluentTooltip<'line'>(theme),\n },\n scales: {\n x: {\n stacked,\n ticks: {\n color: labelColor,\n font: { family: fontFamily, size: fontSize },\n },\n grid: { color: gridColor },\n },\n y: {\n stacked,\n ticks: {\n color: labelColor,\n font: { family: fontFamily, size: fontSize },\n },\n grid: { color: gridColor },\n },\n },\n }), [\n title,\n showDatalabels,\n theme,\n fontFamily,\n fontSize,\n labelColor,\n gridColor,\n stacked,\n createFluentTooltip,\n ]);\n\n return (\n <div className={styles.chartWithLegend}>\n <div className={styles.chartArea}>\n <Line data={chartData} options={options} />\n </div>\n <RenderLegend\n data={data}\n visibleSeries={visibleSeries}\n seriesColors={seriesColors}\n toggleSeries={toggleSeries}\n />\n </div>\n );\n}\n","import {\n BarElement,\n CategoryScale,\n Chart as ChartJS,\n ChartOptions,\n Legend,\n LinearScale,\n Title,\n Tooltip,\n} from 'chart.js';\nimport React, { useMemo, useState } from 'react';\n\nimport { Bar } from 'react-chartjs-2';\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\nimport RenderLegend from '../../components/RenderLegend/RenderLegend';\nimport { Theme } from '@fluentui/react-theme';\nimport { useGraphGlobalStyles } from '../../graphGlobalStyles/useGraphGlobalStyles';\nimport { useGraphUtils } from '../../hooks/useGraphUtils';\n\nChartJS.register(\n CategoryScale,\n LinearScale,\n BarElement,\n Tooltip,\n Legend,\n Title,\n ChartDataLabels,\n \n \n);\n\n\n\nexport interface BarHorizontalProps<T> {\n data: { label: string; data: T[] }[];\n getPrimary: (datum: T) => string | number;\n getSecondary: (datum: T) => number;\n stacked?: boolean;\n title?: string;\n showDatalabels?: boolean;\n theme: Theme;\n}\n\nexport default function BarHorizontalChart<T extends object>({\n data,\n getPrimary,\n getSecondary,\n stacked = false,\n showDatalabels = false,\n title,\n theme\n}: BarHorizontalProps<T>) {\n const [visibleSeries, setVisibleSeries] = useState(() =>\n data.length > 1 ? data.map(s => s.label) : [data[0]?.label]\n );\nconst styles = useGraphGlobalStyles();\n \n const { lightenColor, getFluentPalette , createFluentTooltip} = useGraphUtils(theme);\n\n const seriesColors = useMemo(() => {\n return data.reduce((acc, series, idx) => {\n const base = getFluentPalette(theme)[\n idx % getFluentPalette(theme).length\n ];\n const color = lightenColor(base, 0.3);\n acc[series.label] = color;\n return acc;\n }, {} as Record<string, string>);\n }, [data]);\n\n const toggleSeries = (label: string) => {\n setVisibleSeries(prev => {\n const isVisible = prev.includes(label);\n const next = isVisible ? prev.filter(l => l !== label) : [...prev, label];\n return next.length === 0 && data.length > 0 ? [data[0].label] : next;\n });\n };\n\n const allCategories = useMemo(() => {\n const categorySet = new Set<string | number>();\n data.forEach(series => {\n series.data.forEach(datum => {\n categorySet.add(getPrimary(datum));\n });\n });\n return Array.from(categorySet);\n }, [data, getPrimary]);\n\n const chartData = useMemo(() => {\n return {\n labels: allCategories,\n datasets: data\n .filter(series => visibleSeries.includes(series.label))\n .map(series => ({\n label: series.label,\n backgroundColor: seriesColors[series.label],\n data: allCategories.map(cat => {\n const found = series.data.find(d => getPrimary(d) === cat);\n return found ? getSecondary(found) : 0;\n }),\n })),\n };\n }, [data, visibleSeries, allCategories, seriesColors]);\n\n const { fontFamily, fontSize, labelColor, gridColor } = useMemo(() => ({\n fontFamily: theme.fontFamilyBase,\n fontSize: parseInt(theme.fontSizeBase200.replace('px', '')) || 14,\n labelColor: theme.colorNeutralForeground1,\n gridColor: theme.colorNeutralStroke2,\n }), [theme]);\n\n const options: ChartOptions<'bar'> = useMemo(() => ({\n indexAxis: 'y',\n responsive: true,\n maintainAspectRatio: false,\n plugins: {\n title: {\n display: !!title,\n text: title,\n font: {\n size: 14,\n family: theme.fontFamilyBase,\n weight: theme.fontWeightSemibold,\n },\n color: theme.colorNeutralForeground1,\n padding: {\n top: 20,\n bottom: 20,\n },\n },\n datalabels: {\n display: showDatalabels,\n color: theme.colorNeutralForeground1,\n font: {\n family: theme.fontFamilyBase,\n size: parseInt(theme.fontSizeBase200.replace('px', '')) || 14,\n },\n },\n legend: {\n display: false,\n },\n tooltip: createFluentTooltip<'bar'>(theme),\n },\n scales: {\n x: {\n stacked,\n ticks: {\n color: labelColor,\n font: {\n family: fontFamily,\n size: fontSize,\n },\n },\n grid: {\n color: gridColor,\n },\n },\n y: {\n stacked,\n ticks: {\n color: labelColor,\n font: {\n family: fontFamily,\n size: fontSize,\n },\n },\n grid: {\n color: gridColor,\n },\n },\n },\n }), [\n title,\n showDatalabels,\n theme,\n fontFamily,\n fontSize,\n labelColor,\n gridColor,\n stacked,\n createFluentTooltip,\n ]);\n\n return (\n <div className={styles.chartWithLegend}>\n <div className={styles.chartArea}>\n <Bar data={chartData} options={options} />\n </div>\n <div className={styles.legendArea} >\n <RenderLegend\n data={data}\n visibleSeries={visibleSeries}\n seriesColors={seriesColors}\n toggleSeries={toggleSeries}\n />\n </div>\n </div>\n \n );\n}\n","import {\n BubbleDataPoint,\n CategoryScale,\n Chart as ChartJS,\n ChartOptions,\n Legend,\n LinearScale,\n PointElement,\n Title,\n Tooltip,\n} from 'chart.js';\nimport React, { useMemo, useState } from 'react';\nimport { Theme, webLightTheme } from '@fluentui/react-components';\n\nimport { Bubble } from 'react-chartjs-2';\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\nimport RenderLegend from '../../components/RenderLegend/RenderLegend';\nimport { useGraphGlobalStyles } from '../../graphGlobalStyles/useGraphGlobalStyles';\nimport { useGraphUtils } from '../../hooks/useGraphUtils';\n\nChartJS.register(\n CategoryScale,\n LinearScale,\n PointElement,\n Tooltip,\n Legend,\n ChartDataLabels,\n Title\n);\n\nexport interface BubbleChartProps<T> {\n data: { label: string; data: T[] }[];\n getPrimary: (datum: T) => string | number | Date;\n getSecondary: (datum: T) => number;\n getRadius: (datum: T) => number;\n title?: string;\n showDataLabels?: boolean;\n theme?: Theme;\n}\n\nexport default function BubbleChart<T extends object>({\n data,\n getPrimary,\n getSecondary,\n getRadius,\n showDataLabels,\n title,\n theme = webLightTheme,\n}: BubbleChartProps<T>) {\n const [visibleSeries, setVisibleSeries] = useState(() =>\n data.length > 1 ? data.map(s => s.label) : [data[0]?.label]\n );\n\n const { lightenColor, getFluentPalette, createFluentTooltip } = useGraphUtils(\n theme\n );\n\n const styles = useGraphGlobalStyles();\n const seriesColors = useMemo(() => {\n return data.reduce((acc, series, idx) => {\n const base = getFluentPalette(theme)[\n idx % getFluentPalette(theme).length\n ];\n const color = lightenColor(base, 0.3);\n acc[series.label] = color;\n return acc;\n }, {} as Record<string, string>);\n }, [data, theme]);\n\n const toggleSeries = (label: string) => {\n setVisibleSeries(prev => {\n const isVisible = prev.includes(label);\n const next = isVisible ? prev.filter(l => l !== label) : [...prev, label];\n return next.length === 0 && data.length > 0 ? [data[0].label] : next;\n });\n };\n\n const chartData = useMemo(() => {\n return {\n datasets: data\n .filter(series => visibleSeries.includes(series.label))\n .map(series => ({\n label: series.label,\n data: series.data.map(d => ({\n x: getPrimary(d),\n y: getSecondary(d),\n r: getRadius(d),\n })) as BubbleDataPoint[],\n backgroundColor: seriesColors[series.label],\n borderColor: theme.colorNeutralStroke1,\n borderWidth: 1,\n hoverBorderWidth: 2,\n })),\n };\n }, [data, visibleSeries, getPrimary, getSecondary, getRadius, seriesColors]);\n\n const { fontFamily, fontSize, labelColor, gridColor } = useMemo(() => ({\n fontFamily: theme.fontFamilyBase,\n fontSize: parseInt(theme.fontSizeBase200.replace('px', '')) || 14,\n labelColor: theme.colorNeutralForeground1,\n gridColor: theme.colorNeutralStroke2,\n }), [theme]);\n\n const options: ChartOptions<'bubble'> = useMemo(() => ({\n responsive: true,\n maintainAspectRatio: false,\n plugins: {\n title: {\n display: !!title,\n text: title,\n font: {\n size: 14,\n family: theme.fontFamilyBase,\n weight: theme.fontWeightSemibold,\n },\n color: theme.colorNeutralForeground1,\n padding: {\n top: 20,\n bottom: 20,\n },\n },\n datalabels: {\n display: showDataLabels,\n color: theme.colorNeutralForeground1,\n font: {\n family: theme.fontFamilyBase,\n size: parseInt(theme.fontSizeBase200.replace('px', '')) || 14,\n },\n },\n legend: { display: false },\n tooltip: createFluentTooltip<'bubble'>(theme),\n },\n scales: {\n x: {\n type:\n typeof getPrimary(data[0]?.data[0]) === 'number'\n ? 'linear'\n : 'category',\n ticks: {\n color: labelColor,\n font: { family: fontFamily, size: fontSize },\n },\n grid: { color: gridColor },\n },\n y: {\n ticks: {\n color: labelColor,\n font: { family: fontFamily, size: fontSize },\n },\n grid: { color: gridColor },\n },\n },\n }), [\n title,\n showDataLabels,\n theme,\n getPrimary,\n getSecondary,\n data,\n fontFamily,\n fontSize,\n labelColor,\n gridColor,\n createFluentTooltip,\n ]);\n\n return (\n <>\n <div className={styles.chartWithLegend}>\n <div className={styles.chartArea}>\n <Bubble data={chartData} options={options} />\n </div>\n <div className={styles.legendArea}>\n <RenderLegend\n data={data}\n visibleSeries={visibleSeries}\n seriesColors={seriesColors}\n toggleSeries={toggleSeries}\n />\n </div>\n </div>\n </>\n );\n}\n","import {\n BarElement,\n CategoryScale,\n Chart as ChartJS,\n ChartOptions,\n Legend,\n LineElement,\n LinearScale,\n PointElement,\n Title,\n Tooltip,\n} from 'chart.js';\nimport React, { useMemo, useState } from 'react';\nimport { Theme, webLightTheme } from '@fluentui/react-components';\n\nimport { Chart } from 'react-chartjs-2';\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\nimport RenderLegend from '../../components/RenderLegend/RenderLegend';\nimport { useGraphGlobalStyles } from '../../graphGlobalStyles/useGraphGlobalStyles';\nimport { useGraphUtils } from '../../hooks/useGraphUtils';\n\nChartJS.register(ChartDataLabels);\nChartJS.register(\n CategoryScale,\n LinearScale,\n BarElement,\n LineElement,\n PointElement,\n Tooltip,\n Legend,\n Title\n);\n\nexport interface ComboChartProps<T> {\n data: {\n label: string;\n type: 'bar' | 'line';\n data: T[];\n yAxisID?: string;\n }[];\n getPrimary: (datum: T) => string | number;\n getSecondary: (datum: T) => number;\n title?: string;\n showDataLabels?: boolean;\n theme?: Theme;\n}\n\nexport default function ComboChart<T extends object>({\n data,\n getPrimary,\n getSecondary,\n title,\n showDataLabels = false,\n theme = webLightTheme,\n}: ComboChartProps<T>) {\n const [visibleSeries, setVisibleSeries] = useState(() =>\n data.map(s => s.label)\n );\n\n const styles = useGraphGlobalStyles();\n const { lightenColor, getFluentPalette, createFluentTooltip } = useGraphUtils(theme);\n\n const seriesColors = useMemo(() => {\n return data.reduce((acc, series, idx) => {\n const base = getFluentPalette(theme)[\n idx % getFluentPalette(theme).length\n ];\n acc[series.label] = lightenColor(base, 0.3);\n return acc;\n }, {} as Record<string, string>);\n }, [data, theme]);\n\n const toggleSeries = (label: string) => {\n setVisibleSeries(prev => {\n const isVisible = prev.includes(label);\n const next = isVisible ? prev.filter(l => l !== label) : [...prev, label];\n return next.length === 0 ? [data[0].label] : next;\n });\n };\n\n const allCategories = useMemo(() => {\n const set = new Set<string | number>();\n data.forEach(series => series.data.forEach(d => set.add(getPrimary(d))));\n return Array.from(set);\n }, [data, getPrimary]);\n\n const chartData = useMemo(() => {\n const sortedSeries = data\n .filter(series => visibleSeries.includes(series.label))\n .sort((a, b) => {\n // Ensure bars come before lines\n if (a.type === 'bar' && b.type === 'line') return -1;\n if (a.type === 'line' && b.type === 'bar') return 1;\n return 0;\n });\n\n return {\n labels: allCategories,\n datasets: sortedSeries.map(series => ({\n type: series.type,\n label: series.label,\n yAxisID: series.yAxisID ?? 'y',\n data: allCategories.map(cat => {\n const found = series.data.find(d => getPrimary(d) === cat);\n return found ? getSecondary(found) : 0;\n }),\n backgroundColor: seriesColors[series.label],\n borderColor: seriesColors[series.label],\n fill: series.type === 'bar',\n tension: series.type === 'line' ? 0.4 : 0,\n pointRadius: series.type === 'line' ? 3 : 0,\n borderWidth: series.type === 'line' ? 2 : 1,\n order: series.type === 'bar' ? 1 : 0, // Ensure bars are drawn first\n })),\n };\n }, [\n data,\n visibleSeries,\n allCategories,\n getPrimary,\n getSecondary,\n seriesColors,\n ]);\n\n const { fontFamily, fontSize, labelColor, gridColor } = useMemo(() => ({\n fontFamily: theme.fontFamilyBase,\n fontSize: parseInt(theme.fontSizeBase200.replace('px', '')) || 14,\n labelColor: theme.colorNeutralForeground1,\n gridColor: theme.colorNeutralStroke2,\n }), [theme]);\n\n \n\n const options: ChartOptions<'bar' | 'line'> = useMemo(() => ( {\n responsive: true,\n maintainAspectRatio: false,\n plugins: {\n title: {\n display: !!title,\n text: title,\n font: {\n size: 14,\n family: theme.fontFamilyBase,\n weight: theme.fontWeightSemibold,\n },\n color: theme.colorNeutralForeground1,\n padding: {\n top: 20,\n bottom: 20,\n },\n },\n datalabels: {\n display: showDataLabels,\n color: theme.colorNeutralForeground1,\n font: {\n family: theme.fontFamilyBase,\n size: parseInt(theme.fontSizeBase200.replace('px', '')) || 14,\n },\n },\n legend: { display: false },\n tooltip: createFluentTooltip<'bar' | 'line'>(theme),\n },\n scales: {\n x: {\n ticks: {\n color: labelColor,\n font: { family: fontFamily, size: fontSize },\n },\n grid: { color: gridColor },\n },\n y: {\n position: 'left',\n ticks: {\n color: labelColor,\n font: { family: fontFamily, size: fontSize },\n },\n grid: { color: gridColor },\n stacked: false,\n },\n },\n }), [\n title,\n showDataLabels,\n theme,\n fontFamily,\n fontSize,\n labelColor,\n gridColor,\n createFluentTooltip,\n ]);\n\n return (\n <>\n <div className={styles.chartWithLegend}>\n <div className={styles.chartArea}>\n <Chart type=\"bar\" data={chartData} options={options} />\n </div>\n <div className={styles.legendArea}>\n <RenderLegend\n data={data}\n visibleSeries={visibleSeries}\n seriesColors={seriesColors}\n toggleSeries={toggleSeries}\n />\n </div>\n </div>\n </>\n );\n}\n","import { LegendContainer } from '../legendContainer/LegendContainer';\nimport React from 'react';\nimport { useResponsiveLegend } from '../../hooks/useResponsiveLegend';\n\nexport interface LegendEntry {\n label: string;\n value: number;\n color: string;\n}\n\nexport interface ValueLegendProps {\n entries: LegendEntry[];\n visibleLabels: string[];\n toggleLabel: (label: string) => void;\n}\n\nconst RenderValueLegend: React.FC<ValueLegendProps> = ({\n entries,\n visibleLabels,\n toggleLabel,\n}) => {\n const {\n containerRef,\n\n visibleItems,\n overflowItems,\n } = useResponsiveLegend(entries);\n\n return (\n <LegendContainer\n containerRef={containerRef}\n visibleItems={visibleItems}\n overflowItems={overflowItems}\n items={entries}\n visibleLabels={visibleLabels}\n toggleLabel={toggleLabel}\n renderLabel={entry => `${entry.label}: ${entry.value}`}\n getColor={entry => entry.color}\n />\n );\n};\n\nexport default RenderValueLegend;\n","import {\n ArcElement,\n Chart as ChartJS,\n ChartOptions,\n Legend,\n Title,\n Tooltip,\n} from 'chart.js';\nimport React, { useMemo, useState } from 'react';\nimport { Theme, webLightTheme } from '@fluentui/react-components';\n\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\nimport { Doughnut } from 'react-chartjs-2';\nimport RenderValueLegend from '../../components/renderValueLegend/RenderValueLegend';\nimport { useGraphGlobalStyles } from '../../graphGlobalStyles/useGraphGlobalStyles';\nimport { useGraphUtils } from '../../hooks/useGraphUtils';\n\nChartJS.register(ChartDataLabels);\nChartJS.register(ArcElement, Tooltip, Legend, Title);\n\nexport interface DoughnutChartProps<T> {\n data: {\n label: string;\n data: T[];\n }[];\n getLabel: (datum: T) => string;\n getValue: (datum: T) => number;\n title?: string;\n showDataLabels?: boolean;\n theme?: Theme;\n}\n\nexport default function DoughnutChart<T extends object>({\n data,\n getLabel,\n getValue,\n title,\n showDataLabels = true,\n theme = webLightTheme,\n}: DoughnutChartProps<T>) {\n const styles = useGraphGlobalStyles();\n const { lightenColor, getFluentPalette, createFluentTooltip } = useGraphUtils(\n theme\n );\n const [hiddenLabels, setHiddenLabels] = useState<string[]>([]);\n\n const toggleLabel = (label: string): void => {\n setHiddenLabels(prev =>\n prev.includes(label) ? prev.filter(l => l !== label) : [...prev, label]\n );\n };\n\n const valueMap = useMemo(() => {\n const map = new Map<string, number>();\n data.forEach(series => {\n series.data.forEach(d => {\n const label = getLabel(d);\n const value = getValue(d);\n map.set(label, (map.get(label) || 0) + value);\n });\n });\n return map;\n }, [data, getLabel, getValue]);\n\n const { allLabels, colors } = useMemo(() => {\n const allLabels = Array.from(valueMap.keys());\n const palette = getFluentPalette(theme);\n const colors = allLabels.map((_, i) =>\n lightenColor(palette[i % palette.length], 0.3)\n );\n return { allLabels, colors };\n }, [valueMap, getFluentPalette, theme, lightenColor]);\n\n const { filteredLabels, values, visibleColors } = useMemo(() => {\n const filteredLabels = allLabels.filter(label => !hiddenLabels.includes(label));\n const values = filteredLabels.map(label => valueMap.get(label) || 0);\n const visibleColors = filteredLabels.map(label => {\n const idx = allLabels.indexOf(label);\n return colors[idx];\n });\n return { filteredLabels, values, visibleColors };\n }, [allLabels, hiddenLabels, valueMap, colors]);\n\n const chartData = useMemo(() => ({\n labels: filteredLabels,\n datasets: [\n {\n data: values,\n backgroundColor: visibleColors,\n borderWidth: 1,\n },\n ],\n }), [filteredLabels, values, visibleColors]);\n\n const legendEntries = useMemo(() => {\n return allLabels.map((label, idx) => ({\n label,\n value: valueMap.get(label) || 0,\n color: colors[idx],\n }));\n }, [allLabels, valueMap, colors]);\n\n const options: ChartOptions<'doughnut'> = useMemo(\n () => ({\n responsive: true,\n maintainAspectRatio: false,\n plugins: {\n legend: { display: false },\n tooltip: createFluentTooltip<'doughnut'>(theme),\n title: {\n display: !!title,\n text: title,\n font: {\n size: 14,\n family: theme.fontFamilyBase,\n weight: theme.fontWeightSemibold,\n },\n color: theme.colorNeutralForeground1,\n padding: {\n top: 20,\n bottom: 20,\n },\n },\n datalabels: {\n display: showDataLabels,\n color: theme.colorNeutralForeground1,\n font: {\n family: theme.fontFamilyBase,\n size: parseInt(theme.fontSizeBase200.replace('px', '')) || 14,\n },\n formatter: (value: number) => value,\n },\n },\n }),\n [title, theme, showDataLabels, createFluentTooltip]\n );\n\n return (\n <div className={styles.chartWithLegend}>\n <div className={styles.chartArea}>\n <Doughnut data={chartData} options={options} />\n </div>\n <div className={styles.legendArea}>\n <RenderValueLegend\n entries={legendEntries}\n visibleLabels={filteredLabels}\n toggleLabel={toggleLabel}\n />\n </div>\n </div>\n );\n}\n","import {\n BarElement,\n CategoryScale,\n Chart as ChartJS,\n ChartOptions,\n Legend,\n LinearScale,\n Title,\n Tooltip,\n} from 'chart.js';\nimport React, { useMemo, useState } from 'react';\nimport { Theme, webLightTheme } from '@fluentui/react-components';\n\nimport { Bar } from 'react-chartjs-2';\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\nimport RenderLegend from '../../components/RenderLegend/RenderLegend';\nimport { useGraphGlobalStyles } from '../../graphGlobalStyles/useGraphGlobalStyles';\nimport { useGraphUtils } from '../../hooks/useGraphUtils';\n\nChartJS.register(ChartDataLabels);\nChartJS.register(\n CategoryScale,\n LinearScale,\n BarElement,\n Tooltip,\n Legend,\n Title\n);\n\nexport interface FloatingBarChartProps<T> {\n data: { label: string; data: T[] }[];\n getPrimary: (datum: T) => string | number;\n getRange: (datum: T) => [number, number]; // e.g., [min, max]\n title?: string;\n showDataLabels?: boolean;\n theme?: Theme;\n}\n\nexport default function FloatingBarChart<T extends object>({\n data,\n getPrimary,\n getRange,\n title,\n showDataLabels = false,\n theme = webLightTheme,\n}: FloatingBarChartProps<T>) {\n const [visibleSeries, setVisibleSeries] = useState(() =>\n data.length > 1 ? data.map(s => s.label) : [data[0]?.label]\n );\n\n const styles = useGraphGlobalStyles();\n const { lightenColor, getFluentPalette, createFluentTooltip } = useGraphUtils(\n theme\n );\n\n const seriesColors = useMemo(() => {\n return data.reduce((acc, series, idx) => {\n const base = getFluentPalette(theme)[\n idx % getFluentPalette(theme).length\n ];\n const color = lightenColor(base, 0.3);\n acc[series.label] = color;\n return acc;\n }, {} as Record<string, string>);\n }, [data, theme]);\n\n const toggleSeries = (label: string) => {\n setVisibleSeries(prev => {\n const isVisible = prev.includes(label);\n const next = isVisible ? prev.filter(l => l !== label) : [...prev, label];\n return next.length === 0 && data.length > 0 ? [data[0].label] : next;\n });\n };\n\n const allCategories = useMemo(() => {\n const set = new Set<string | number>();\n data.forEach(series => {\n series.data.forEach(d => set.add(getPrimary(d)));\n });\n return Array.from(set);\n }, [data, getPrimary]);\n\n const chartData = useMemo(() => {\n return {\n labels: allCategories,\n datasets: data\n .filter(series => visibleSeries.includes(series.label))\n .map(series => ({\n label: series.label,\n data: allCategories.map(cat => {\n const match = series.data.find(d => getPrimary(d) === cat);\n return match ? getRange(match) : [0, 0];\n }),\n backgroundColor: seriesColors[series.label],\n borderRadius: 2,\n })),\n };\n }, [data, visibleSeries, allCategories, getPrimary, getRange, seriesColors]);\n\nconst { fontFamily, fontSize, labelColor, gridColor } = useMemo(() => ({\n fontFamily: theme.fontFamilyBase,\n fontSize: parseInt(theme.fontSizeBase200.replace('px', '')) || 14,\n labelColor: theme.colorNeutralForeground1,\n gridColor: theme.colorNeutralStroke2,\n}), [theme]);\n\nconst options: ChartOptions<'bar'> = useMemo(() => ({\n responsive: true,\n maintainAspectRatio: false,\n plugins: {\n title: {\n display: !!title,\n text: title,\n font: {\n size: 14,\n family: theme.fontFamilyBase,\n weight: theme.fontWeightSemibold,\n },\n color: theme.colorNeutralForeground1,\n padding: {\n top: 20,\n bottom: 20,\n },\n },\n datalabels: {\n display: showDataLabels,\n color: theme.colorNeutralForeground1,\n font: {\n family: theme.fontFamilyBase,\n size: parseInt(theme.fontSizeBase200.replace('px', '')) || 14,\n },\n },\n legend: { display: false },\n tooltip: createFluentTooltip<'bar'>(theme),\n },\n scales: {\n x: {\n ticks: {\n color: labelColor,\n font: { family: fontFamily, size: fontSize },\n },\n grid: { color: gridColor },\n },\n y: {\n ticks: {\n color: labelColor,\n font: { family: fontFamily, size: fontSize },\n },\n grid: { color: gridColor },\n },\n },\n}), [\n title,\n theme,\n showDataLabels,\n labelColor,\n fontFamily,\n fontSize,\n gridColor,\n createFluentTooltip\n]);\n\n return (\n <div className={styles.chartWithLegend}>\n <div className={styles.chartArea}>\n <Bar data={chartData} options={options} />\n </div>\n <div className={styles.legendArea}>\n <RenderLegend\n data={data}\n visibleSeries={visibleSeries}\n seriesColors={seriesColors}\n toggleSeries={toggleSeries}\n />\n </div>\n </div>\n );\n}\n","import {\n CategoryScale,\n Chart as ChartJS,\n ChartOptions,\n Legend,\n LineElement,\n LinearScale,\n PointElement,\n Title,\n Tooltip,\n} from 'chart.js';\nimport React, { useMemo, useState } from 'react';\nimport { Theme, webLightTheme } from '@fluentui/react-components';\n\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\nimport { Line } from 'react-chartjs-2';\nimport RenderLegend from '../../components/RenderLegend/RenderLegend';\nimport { useGraphGlobalStyles } from '../../graphGlobalStyles/useGraphGlobalStyles';\nimport { useGraphUtils } from '../../hooks/useGraphUtils';\n\nChartJS.register(ChartDataLabels);\nChartJS.register(\n LineElement,\n PointElement,\n CategoryScale,\n LinearScale,\n Tooltip,\n Legend,\n Title\n);\n\nexport interface LineChartProps<T> {\n data: { label: string; data: T[] }[];\n getPrimary: (datum: T) => string | number;\n getSecondary: (datum: T) => number;\n title?: string;\n showDataLabels?: boolean;\n theme?: Theme;\n}\n\nexport default function LineChart<T extends object>({\n data,\n getPrimary,\n getSecondary,\n title,\n showDataLabels = false,\n theme = webLightTheme,\n}: LineChartProps<T>) {\n const [visibleSeries, setVisibleSeries] = useState(() =>\n data.length > 1 ? data.map(s => s.label) : [data[0]?.label]\n );\n\n const styles = useGraphGlobalStyles();\n const { lightenColor, getFluentPalette , createFluentTooltip} = useGraphUtils(theme);\n\n const seriesColors = useMemo(() => {\n return data.reduce((acc, series, idx) => {\n const base = getFluentPalette(theme)[\n idx % getFluentPalette(theme).length\n ];\n const color = lightenColor(base, 0.3);\n acc[series.label] = color;\n return acc;\n }, {} as Record<string, string>);\n }, [data, theme]);\n\n const toggleSeries = (label: string) => {\n setVisibleSeries(prev => {\n const isVisible = prev.includes(label);\n const next = isVisible ? prev.filter(l => l !== label) : [...prev, label];\n return next.length === 0 && data.length > 0 ? [data[0].label] : next;\n });\n };\n\n const allCategories = useMemo(() => {\n const set = new Set<string | number>();\n data.forEach(series => {\n series.data.forEach(d => set.add(getPrimary(d)));\n });\n return Array.from(set);\n }, [data, getPrimary]);\n\n const chartData = useMemo(() => {\n return {\n labels: allCategories,\n datasets: data\n .filter(series => visibleSeries.includes(series.label))\n .map(series => ({\n label: series.label,\n data: allCategories.map(cat => {\n const match = series.data.find(d => getPrimary(d) === cat);\n return match ? getSecondary(match) : null;\n }),\n borderColor: seriesColors[series.label],\n backgroundColor: seriesColors[series.label],\n tension: 0.4,\n fill: false,\n pointRadius: 4,\n })),\n };\n }, [\n data,\n visibleSeries,\n allCategories,\n getPrimary,\n getSecondary,\n seriesColors,\n ]);\n\n const { fontFamily, fontSize, labelColor, gridColor } = useMemo(() => ({\n fontFamily: theme.fontFamilyBase,\n fontSize: parseInt(theme.fontSizeBase200.replace('px', '')) || 14,\n labelColor: theme.colorNeutralForeground1,\n gridColor: theme.colorNeutralStroke2,\n }), [theme]);\n\n const options: ChartOptions<'line'> = useMemo(() => ({\n responsive: true,\n maintainAspectRatio: false,\n plugins: {\n title: {\n display: !!title,\n text: title,\n font: {\n size: 14,\n family: theme.fontFamilyBase,\n weight: theme.fontWeightSemibold,\n },\n color: theme.colorNeutralForeground1,\n padding: {\n top: 20,\n bottom: 20,\n },\n },\n datalabels: {\n display: showDataLabels,\n color: theme.colorNeutralForeground1,\n font: {\n family: theme.fontFamilyBase,\n size: parseInt(theme.fontSizeBase200.replace('px', '')) || 14,\n },\n },\n legend: { display: false },\n tooltip: createFluentTooltip<'line'>(theme),\n },\n scales: {\n x: {\n ticks: {\n color: labelColor,\n font: {\n family: fontFamily,\n size: fontSize,\n },\n },\n grid: {\n color: gridColor,\n },\n },\n y: {\n ticks: {\n color: labelColor,\n font: {\n family: fontFamily,\n size: fontSize,\n },\n },\n grid: {\n color: gridColor,\n },\n },\n },\n }), [\n title,\n theme,\n showDataLabels,\n labelColor,\n fontFamily,\n fontSize,\n gridColor,\n createFluentTooltip\n ]);\n\n return (\n\n <div className={styles.chartWithLegend}>\n <div className={styles.chartArea}>\n <Line data={chartData} options={options} />\n </div>\n <div className={styles.legendArea} >\n <RenderLegend\n data={data}\n visibleSeries={visibleSeries}\n seriesColors={seriesColors}\n toggleSeries={toggleSeries}\n />\n </div>\n </div>\n \n );\n}\n","import {\n ArcElement,\n Chart as ChartJS,\n ChartOptions,\n Legend,\n Title,\n Tooltip,\n} from 'chart.js';\nimport React, { useMemo, useState } from 'react';\nimport { Theme, webLightTheme } from '@fluentui/react-components';\n\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\nimport { Pie } from 'react-chartjs-2';\nimport RenderValueLegend from '../../components/renderValueLegend/RenderValueLegend';\nimport { createFluentTooltip } from '../../hooks/useGraphUtils';\nimport { useGraphGlobalStyles } from '../../graphGlobalStyles/useGraphGlobalStyles';\nimport { useGraphUtils } from '../../hooks/useGraphUtils';\n\nChartJS.register(ChartDataLabels);\nChartJS.register(ArcElement, Tooltip, Legend, Title);\n\nexport interface PieChartProps<T> {\n data: {\n label: string;\n data: T[];\n }[];\n getLabel: (datum: T) => string;\n getValue: (datum: T) => number;\n title?: string;\n showDataLabels?: boolean;\n theme?: Theme;\n}\n\nexport default function PieChart<T extends object>({\n data,\n getLabel,\n getValue,\n title,\n showDataLabels = false,\n theme = webLightTheme,\n}: PieChartProps<T>) {\n const { getFluentPalette, lightenColor } = useGraphUtils(theme);\n const [hiddenLabels, setHiddenLabels] = useState<string[]>([]);\n const styles = useGraphGlobalStyles();\n const toggleLabel = (label: string): void => {\n setHiddenLabels(prev =>\n prev.includes(label) ? prev.filter(l => l !== label) : [...prev, label]\n );\n };\n\n const valueMap = useMemo(() => {\n const map = new Map<string, number>();\n data.forEach(series => {\n series.data.forEach(d => {\n const label = getLabel(d);\n const value = getValue(d);\n map.set(label, (map.get(label) || 0) + value);\n });\n });\n return map;\n }, [data, getLabel, getValue]);\n\nconst { allLabels, colors, filteredLabels, values, visibleColors } = useMemo(() => {\n const allLabels = Array.from(valueMap.keys());\n const palette = getFluentPalette(theme);\n const colors = allLabels.map((_, i) =>\n lightenColor(palette[i % palette.length], 0.3)\n );\n\n const filteredLabels = allLabels.filter(\n label => !hiddenLabels.includes(label)\n );\n const values = filteredLabels.map(label => valueMap.get(label) || 0);\n const visibleColors = filteredLabels.map(label => {\n const idx = allLabels.indexOf(label);\n return colors[idx];\n });\n\n return { allLabels, colors, filteredLabels, values, visibleColors };\n}, [valueMap, getFluentPalette, lightenColor, theme, hiddenLabels]);\n\nconst { chartData, legendEntries } = useMemo(() => {\n const chartData = {\n labels: filteredLabels,\n datasets: [\n {\n data: values,\n backgroundColor: visibleColors,\n borderWidth: 1,\n },\n ],\n };\n\n const legendEntries = allLabels.map((label, i) => ({\n label,\n value: valueMap.get(label) || 0,\n color: colors[i],\n }));\n\n return { chartData, legendEntries };\n}, [filteredLabels, values, visibleColors, allLabels, valueMap, colors]);\n\nconst options = useMemo<ChartOptions<'pie'>>(() => ({\n responsive: true,\n maintainAspectRatio: false,\n plugins: {\n tooltip: createFluentTooltip<'pie'>(theme),\n legend: { display: false },\n title: {\n display: !!title,\n text: title,\n font: {\n size: 14,\n family: theme.fontFamilyBase,\n weight: theme.fontWeightSemibold,\n },\n color: theme.colorNeutralForeground1,\n padding: {\n top: 20,\n bottom: 20,\n },\n },\n datalabels: {\n display: showDataLabels,\n color: theme.colorNeutralForeground1,\n font: {\n family: theme.fontFamilyBase,\n size: parseInt(theme.fontSizeBase200.replace('px', '')) || 14,\n },\n },\n },\n}), [theme, title, showDataLabels]);\n\n return (\n <div className={styles.chartWithLegend}>\n <div className={styles.chartArea}>\n <Pie data={chartData} options={options} />\n </div>\n <div className={styles.legendArea}>\n <RenderValueLegend\n entries={legendEntries}\n visibleLabels={filteredLabels}\n toggleLabel={toggleLabel}\n />\n </div>\n </div>\n );\n}\n","import { LegendContainer } from '../legendContainer/LegendContainer';\nimport React from 'react';\nimport { useResponsiveLegend } from '../../hooks/useResponsiveLegend';\n\nexport interface SliceLegendProps {\n labels: string[];\n colors: string[];\n visibleLabels: string[];\n toggleLabel: (label: string) => void;\n}\n\nconst RenderSliceLegend: React.FC<SliceLegendProps> = ({\n labels,\n colors,\n visibleLabels,\n toggleLabel,\n}) => {\n interface SliceLegendItem {\n label: string;\n color: string;\n }\n\n const items: SliceLegendItem[] = labels.map((label, i) => ({ label, color: colors[i] }));\n const {\n containerRef,\n \n visibleItems,\n overflowItems,\n } = useResponsiveLegend(items);\n\n return (\n <LegendContainer\n containerRef={containerRef}\n \n visibleItems={visibleItems}\n overflowItems={overflowItems}\n items={items}\n visibleLabels={visibleLabels}\n toggleLabel={toggleLabel}\n renderLabel={item => item.label}\n getColor={item => item.color}\n />\n );\n};\n\nexport default RenderSliceLegend;\n","import {\n ArcElement,\n Chart as ChartJS,\n ChartOptions,\n Legend,\n RadialLinearScale,\n Title,\n Tooltip,\n} from 'chart.js';\nimport React, { useMemo, useState } from 'react';\nimport { Theme, webLightTheme } from '@fluentui/react-components';\nimport { createFluentTooltip, useGraphUtils } from '../../hooks/useGraphUtils';\n\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\nimport { PolarArea } from 'react-chartjs-2';\nimport RenderSliceLegend from '../../components/renderSliceLegend/RenderSliceLegend';\nimport { useGraphGlobalStyles } from '../../graphGlobalStyles/useGraphGlobalStyles';\n\nChartJS.register(\n RadialLinearScale,\n ArcElement,\n Tooltip,\n Legend,\n Title,\n ChartDataLabels\n);\n\nexport interface PolarChartProps<T> {\n data: {\n label: string;\n data: T[];\n }[];\n getLabel: (datum: T) => string;\n getValue: (datum: T) => number;\n title?: string;\n showDataLabels?: boolean;\n theme?: Theme;\n}\n\nexport default function PolarChart<T extends object>({\n data,\n getLabel,\n getValue,\n title,\n showDataLabels = true,\n theme = webLightTheme,\n}: PolarChartProps<T>) {\n const { getFluentPalette, lightenColor } = useGraphUtils(theme);\n const [hiddenLabels, setHiddenLabels] = useState<string[]>([]);\n const styles = useGraphGlobalStyles();\n const toggleLabel = (label: string) => {\n setHiddenLabels(prev =>\n prev.includes(label) ? prev.filter(l => l !== label) : [...prev, label]\n );\n };\n\n const valueMap = useMemo(() => {\n const map = new Map<string, number>();\n data.forEach(series => {\n series.data.forEach(d => {\n const label = getLabel(d);\n const value = getValue(d);\n map.set(label, (map.get(label) || 0) + value);\n });\n });\n return map;\n }, [data, getLabel, getValue]);\n\nconst { allLabels, colors, filteredLabels, values, visibleColors } = useMemo(() => {\n const allLabels = Array.from(valueMap.keys());\n const palette = getFluentPalette(theme);\n const colors = allLabels.map((_, i) =>\n lightenColor(palette[i % palette.length], 0.3)\n );\n\n const filteredLabels = allLabels.filter(\n label => !hiddenLabels.includes(label)\n );\n const values = filteredLabels.map(label => valueMap.get(label) || 0);\n const visibleColors = filteredLabels.map(label => {\n const idx = allLabels.indexOf(label);\n return colors[idx];\n });\n\n return { allLabels, colors, filteredLabels, values, visibleColors };\n}, [valueMap, getFluentPalette, lightenColor, theme, hiddenLabels]);\n\nconst chartData = useMemo(() => ({\n labels: filteredLabels,\n datasets: [\n {\n data: values,\n backgroundColor: visibleColors,\n borderWidth: 1,\n },\n ],\n}), [filteredLabels, values, visibleColors]);\n\nconst options = useMemo<ChartOptions<'polarArea'>>(() => ({\n responsive: true,\n maintainAspectRatio: false,\n plugins: {\n title: {\n display: !!title,\n text: title,\n font: {\n size: 14,\n family: theme.fontFamilyBase,\n weight: theme.fontWeightSemibold,\n },\n color: theme.colorNeutralForeground1,\n padding: {\n top: 20,\n bottom: 20,\n },\n },\n datalabels: {\n display: showDataLabels,\n color: theme.colorNeutralForeground1,\n font: {\n family: theme.fontFamilyBase,\n size: parseInt(theme.fontSizeBase200.replace('px', '')) || 14,\n },\n formatter: (value: number) => value,\n },\n tooltip: createFluentTooltip<'polarArea'>(theme),\n legend: { display: false },\n },\n scales: {\n r: {\n ticks: {\n color: theme.colorNeutralForeground1,\n backdropColor: 'transparent',\n font: {\n family: theme.fontFamilyBase,\n size: parseInt(theme.fontSizeBase200.replace('px', '')) || 14,\n },\n },\n grid: {\n color: theme.colorNeutralStroke2,\n },\n },\n },\n}), [theme, title, showDataLabels, createFluentTooltip]);\n\n return (\n <div className={styles.chartWithLegend}>\n <div className={styles.chartArea}>\n <PolarArea data={chartData} options={options} />\n </div>\n <div className={styles.legendArea}>\n <RenderSliceLegend\n labels={allLabels}\n colors={colors}\n visibleLabels={filteredLabels}\n toggleLabel={toggleLabel}\n />\n </div>\n </div>\n );\n}\n","import {\n Chart as ChartJS,\n ChartOptions,\n Filler,\n Legend,\n LineElement,\n PointElement,\n RadialLinearScale,\n Title,\n Tooltip,\n} from 'chart.js';\nimport React, { useMemo, useState } from 'react';\nimport { Theme, webLightTheme } from '@fluentui/react-components';\nimport { createFluentTooltip, useGraphUtils } from '../../hooks/useGraphUtils';\n\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\nimport { Radar } from 'react-chartjs-2';\nimport RenderLegend from '../../components/RenderLegend/RenderLegend';\nimport { useGraphGlobalStyles } from '../../graphGlobalStyles/useGraphGlobalStyles';\n\nChartJS.register(ChartDataLabels);\nChartJS.register(\n RadialLinearScale,\n PointElement,\n LineElement,\n Filler,\n Tooltip,\n Legend,\n Title\n);\n\nexport interface RadarChartProps<T> {\n data: { label: string; data: T[] }[];\n getLabel: (datum: T) => string;\n getValue: (datum: T) => number;\n title?: string; \n showDataLabels?: boolean;\n theme?: Theme;\n}\n\nexport default function RadarChart<T extends object>({\n data,\n getLabel,\n getValue,\n title,\n showDataLabels = false,\n theme = webLightTheme, \n}: RadarChartProps<T>) {\n const [visibleSeries, setVisibleSeries] = useState(() =>\n data.map(s => s.label)\n );\n\n const styles = useGraphGlobalStyles();\n const { lightenColor, getFluentPalette } = useGraphUtils(theme);\n\n const seriesColors = useMemo(() => {\n return data.reduce((acc, series, idx) => {\n const base = getFluentPalette(theme)[\n idx % getFluentPalette(theme).length\n ];\n acc[series.label] = lightenColor(base, 0.3);\n return acc;\n }, {} as Record<string, string>);\n }, [data, getFluentPalette, lightenColor, theme]);\n\n const toggleSeries = (label: string) => {\n setVisibleSeries(prev =>\n prev.includes(label) ? prev.filter(l => l !== label) : [...prev, label]\n );\n };\n\n const allLabels = useMemo(() => {\n const set = new Set<string>();\n data.forEach(series => {\n series.data.forEach(d => set.add(getLabel(d)));\n });\n return Array.from(set);\n }, [data, getLabel]);\n\n const chartData = useMemo(() => {\n return {\n labels: allLabels,\n datasets: data\n .filter(series => visibleSeries.includes(series.label))\n .map(series => ({\n label: series.label,\n data: allLabels.map(label => {\n const match = series.data.find(d => getLabel(d) === label);\n return match ? getValue(match) : 0;\n }),\n backgroundColor: seriesColors[series.label] + '33',\n borderColor: seriesColors[series.label],\n borderWidth: 2,\n pointBackgroundColor: seriesColors[series.label],\n })),\n };\n }, [data, visibleSeries, allLabels, getLabel, getValue, seriesColors]);\n\n const { fontFamily, fontSize, labelColor, gridColor } = useMemo(() => ({\n fontFamily: theme.fontFamilyBase,\n fontSize: parseInt(theme.fontSizeBase200.replace('px', '')) || 14,\n labelColor: theme.colorNeutralForeground1,\n gridColor: theme.colorNeutralStroke2,\n }), [theme]);\n\n const options = useMemo<ChartOptions<'radar'>>(() => ({\n responsive: true,\n maintainAspectRatio: false,\n plugins: {\n title: {\n display: !!title,\n text: title,\n font: {\n size: 14,\n family: theme.fontFamilyBase,\n weight: theme.fontWeightSemibold,\n },\n color: theme.colorNeutralForeground1,\n padding: {\n top: 20,\n bottom: 20,\n },\n },\n datalabels: {\n display: showDataLabels,\n color: theme.colorNeutralForeground1,\n font: {\n family: theme.fontFamilyBase,\n size: parseInt(theme.fontSizeBase200.replace('px', '')) || 14,\n },\n },\n tooltip: createFluentTooltip<'radar'>(theme),\n legend: { display: false },\n },\n scales: {\n r: {\n angleLines: { color: gridColor },\n grid: { color: gridColor },\n pointLabels: {\n color: labelColor,\n font: { family: fontFamily, size: fontSize },\n },\n ticks: {\n color: labelColor,\n font: { family: fontFamily, size: fontSize },\n },\n },\n },\n }), [\n theme,\n title,\n showDataLabels,\n createFluentTooltip,\n gridColor,\n labelColor,\n fontFamily,\n fontSize,\n ]);\n\n return (\n <div className={styles.chartWithLegend}>\n <div className={styles.chartArea}>\n <Radar data={chartData} options={options} />\n </div>\n <RenderLegend\n data={data}\n visibleSeries={visibleSeries}\n seriesColors={seriesColors}\n toggleSeries={toggleSeries}\n />\n </div>\n );\n}\n","import {\n Chart as ChartJS,\n ChartOptions,\n Legend,\n LinearScale,\n PointElement,\n Tooltip,\n} from 'chart.js';\nimport React, { useMemo, useState } from 'react';\nimport { Theme, webLightTheme } from '@fluentui/react-components';\n\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\nimport RenderLegend from '../../components/RenderLegend/RenderLegend';\nimport { Scatter } from 'react-chartjs-2';\nimport { useGraphGlobalStyles } from '../../graphGlobalStyles/useGraphGlobalStyles';\nimport { useGraphUtils } from '../../hooks/useGraphUtils';\n\nChartJS.register(ChartDataLabels);\nChartJS.register(LinearScale, PointElement, Tooltip, Legend);\n\nexport interface ScatterChartProps<T> {\n data: { label: string; data: T[] }[];\n getX: (datum: T) => number;\n getY: (datum: T) => number;\n title?: string;\n showDataLabels?: boolean;\n theme?: Theme;\n}\n\nexport default function ScatterChart<T extends object>({\n data,\n getX,\n getY,\n title,\n showDataLabels = false,\n theme = webLightTheme,\n}: ScatterChartProps<T>) {\n const [visibleSeries, setVisibleSeries] = useState(() =>\n data.map(s => s.label)\n );\n const styles = useGraphGlobalStyles();\n const { getFluentPalette, lightenColor, createFluentTooltip } = useGraphUtils(\n theme\n );\n\n const seriesColors = useMemo(() => {\n return data.reduce((acc, series, idx) => {\n const base = getFluentPalette(theme)[\n idx % getFluentPalette(theme).length\n ];\n acc[series.label] = lightenColor(base, 0.3);\n return acc;\n }, {} as Record<string, string>);\n }, [data, theme]);\n\n const toggleSeries = React.useCallback((label: string) => {\n setVisibleSeries(prev =>\n prev.includes(label) ? prev.filter(l => l !== label) : [...prev, label]\n );\n }, []);\n\n const chartData = useMemo(() => {\n return {\n datasets: data\n .filter(series => visibleSeries.includes(series.label))\n .map(series => ({\n label: series.label,\n data: series.data.map(d => ({ x: getX(d), y: getY(d) })),\n backgroundColor: seriesColors[series.label],\n borderColor: seriesColors[series.label],\n pointRadius: 4,\n })),\n };\n }, [data, visibleSeries, getX, getY, seriesColors]);\n\nconst { fontFamily, fontSize, labelColor, gridColor } = useMemo(() => ({\n fontFamily: theme.fontFamilyBase,\n fontSize: parseInt(theme.fontSizeBase200.replace('px', '')) || 14,\n labelColor: theme.colorNeutralForeground1,\n gridColor: theme.colorNeutralStroke2,\n}), [theme]);\n\nconst options = useMemo<ChartOptions<'scatter'>>(() => ({\n responsive: true,\n maintainAspectRatio: false,\n plugins: {\n title: {\n display: !!title,\n text: title,\n font: {\n size: 14,\n family: theme.fontFamilyBase,\n weight: theme.fontWeightSemibold,\n },\n color: theme.colorNeutralForeground1,\n padding: {\n top: 20,\n bottom: 20,\n },\n },\n datalabels: {\n display: showDataLabels,\n color: theme.colorNeutralForeground1,\n font: {\n family: theme.fontFamilyBase,\n size: parseInt(theme.fontSizeBase200.replace('px', '')) || 14,\n },\n },\n legend: { display: false },\n tooltip: createFluentTooltip<'scatter'>(theme),\n },\n scales: {\n x: {\n type: 'linear',\n position: 'bottom',\n ticks: {\n color: labelColor,\n font: { family: fontFamily, size: fontSize },\n },\n grid: { color: gridColor },\n },\n y: {\n type: 'linear',\n ticks: {\n color: labelColor,\n font: { family: fontFamily, size: fontSize },\n },\n grid: { color: gridColor },\n },\n },\n}), [\n theme,\n title,\n showDataLabels,\n createFluentTooltip,\n labelColor,\n fontFamily,\n fontSize,\n gridColor,\n]);\n\n return (\n <div className={styles.chartWithLegend}>\n <div className={styles.chartArea}>\n <Scatter data={chartData} options={options} />\n </div>\n <RenderLegend\n data={data}\n visibleSeries={visibleSeries}\n seriesColors={seriesColors}\n toggleSeries={toggleSeries}\n />\n </div>\n );\n}\n","import {\n CategoryScale,\n Chart as ChartJS,\n ChartOptions,\n Legend,\n LineElement,\n LinearScale,\n PointElement,\n Title,\n Tooltip,\n} from 'chart.js';\nimport React, { useMemo, useState } from 'react';\nimport { Theme, webLightTheme } from '@fluentui/react-components';\n\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\nimport { Line } from 'react-chartjs-2';\nimport RenderLegend from '../../components/RenderLegend/RenderLegend';\nimport { useGraphGlobalStyles } from '../../graphGlobalStyles/useGraphGlobalStyles';\nimport { useGraphUtils } from '../../hooks/useGraphUtils';\n\nChartJS.register(ChartDataLabels);\nChartJS.register(\n CategoryScale,\n LinearScale,\n LineElement,\n PointElement,\n Tooltip,\n Legend,\n Title\n);\n\nexport interface StackedLineChartProps<T> {\n data: { label: string; data: T[] }[]; \n getPrimary: (datum: T) => string | number;\n getSecondary: (datum: T) => number;\n title?: string;\n showDataLabels?: boolean;\n theme?: Theme;\n}\n\nexport default function StackedLineChart<T extends object>({\n data,\n getPrimary,\n getSecondary,\n title,\n showDataLabels = false,\n theme = webLightTheme,\n}: StackedLineChartProps<T>) {\n const [visibleSeries, setVisibleSeries] = useState(() =>\n data.length > 1 ? data.map(s => s.label) : [data[0]?.label]\n );\n\n const styles = useGraphGlobalStyles();\n const { lightenColor, getFluentPalette, createFluentTooltip } = useGraphUtils(theme);\n\n const seriesColors = useMemo(() => {\n return data.reduce((acc, series, idx) => {\n const base = getFluentPalette(theme)[\n idx % getFluentPalette(theme).length\n ];\n const color = lightenColor(base, 0.3);\n acc[series.label] = color;\n return acc;\n }, {} as Record<string, string>);\n }, [data, theme]);\n\n const toggleSeries = (label: string) => {\n setVisibleSeries(prev => {\n const isVisible = prev.includes(label);\n const next = isVisible ? prev.filter(l => l !== label) : [...prev, label];\n return next.length === 0 && data.length > 0 ? [data[0].label] : next;\n });\n };\n\n const allCategories = useMemo(() => {\n const set = new Set<string | number>();\n data.forEach(series => {\n series.data.forEach(d => set.add(getPrimary(d)));\n });\n return Array.from(set);\n }, [data, getPrimary]);\n\n const chartData = useMemo(() => {\n return {\n labels: allCategories,\n datasets: data\n .filter(series => visibleSeries.includes(series.label))\n .map(series => ({\n label: series.label,\n data: allCategories.map(cat => {\n const match = series.data.find(d => getPrimary(d) === cat);\n return match ? getSecondary(match) : 0;\n }),\n borderColor: seriesColors[series.label],\n backgroundColor: seriesColors[series.label],\n fill: true,\n tension: 0.4,\n pointRadius: 3,\n })),\n };\n }, [\n data,\n visibleSeries,\n allCategories,\n getPrimary,\n getSecondary,\n seriesColors,\n ]);\n\nconst { fontFamily, fontSize, labelColor, gridColor } = useMemo(() => ({\n fontFamily: theme.fontFamilyBase,\n fontSize: parseInt(theme.fontSizeBase200.replace('px', '')) || 14,\n labelColor: theme.colorNeutralForeground1,\n gridColor: theme.colorNeutralStroke2,\n}), [theme]);\n\nconst options = useMemo<ChartOptions<'line'>>(() => ({\n responsive: true,\n maintainAspectRatio: false,\n plugins: {\n title: {\n display: !!title,\n text: title,\n font: {\n size: 14,\n family: theme.fontFamilyBase,\n weight: theme.fontWeightSemibold,\n },\n color: theme.colorNeutralForeground1,\n padding: {\n top: 20,\n bottom: 20,\n },\n },\n datalabels: {\n display: showDataLabels,\n color: theme.colorNeutralForeground1,\n font: {\n family: theme.fontFamilyBase,\n size: parseInt(theme.fontSizeBase200.replace('px', '')) || 14,\n },\n },\n legend: { display: false },\n tooltip: createFluentTooltip<'line'>(theme),\n },\n scales: {\n x: {\n stacked: true,\n ticks: {\n color: labelColor,\n font: { family: fontFamily, size: fontSize },\n },\n grid: { color: gridColor },\n },\n y: {\n stacked: true,\n ticks: {\n color: labelColor,\n font: { family: fontFamily, size: fontSize },\n },\n grid: { color: gridColor },\n },\n },\n}), [\n theme,\n title,\n showDataLabels,\n createFluentTooltip,\n labelColor,\n fontFamily,\n fontSize,\n gridColor,\n]);\n\n return (\n <div className={styles.chartWithLegend}>\n <div className={styles.chartArea}>\n <Line data={chartData} options={options} />\n </div>\n <RenderLegend\n data={data}\n visibleSeries={visibleSeries}\n seriesColors={seriesColors}\n toggleSeries={toggleSeries}\n />\n </div>\n );\n}\n","import {\n CategoryScale,\n Chart as ChartJS,\n ChartOptions,\n Filler,\n Legend,\n LineElement,\n LinearScale,\n PointElement,\n Title,\n Tooltip,\n} from 'chart.js';\nimport React, { useMemo, useState } from 'react';\nimport { Theme, ToggleButton, webLightTheme } from '@fluentui/react-components';\nimport { createFluentTooltip, useGraphUtils } from '../../hooks/useGraphUtils';\n\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\nimport { Line } from 'react-chartjs-2';\nimport RenderLegend from '../../components/RenderLegend/RenderLegend';\nimport { Stack } from '../../components/stack/Stack';\nimport { useGraphGlobalStyles } from '../../graphGlobalStyles/useGraphGlobalStyles';\n\nChartJS.register(ChartDataLabels);\nChartJS.register(\n LineElement,\n PointElement,\n Filler, \n CategoryScale,\n LinearScale,\n Tooltip,\n Legend,\n Title\n);\n\nexport interface SteamChartProps<T> {\n data: { label: string; data: T[] }[]; \n getPrimary: (datum: T) => string | number;\n getSecondary: (datum: T) => number;\n title?: string;\n showDataLabels?: boolean;\n theme?: Theme;\n}\n\nexport default function SteamChart<T extends object>({\n data,\n getPrimary,\n getSecondary,\n title,\n showDataLabels = false,\n theme = webLightTheme,\n}: SteamChartProps<T>) {\n const [visibleSeries, setVisibleSeries] = useState(() =>\n data.length > 1 ? data.map(s => s.label) : [data[0]?.label]\n );\n const [showPercent, setShowPercent] = useState(false);\nconst styles = useGraphGlobalStyles();\n \n const { lightenColor, getFluentPalette } = useGraphUtils(theme);\n\n const seriesColors = useMemo(() => {\n return data.reduce((acc, series, idx) => {\n const base = getFluentPalette(theme)[\n idx % getFluentPalette(theme).length\n ];\n acc[series.label] = lightenColor(base, 0.3);\n return acc;\n }, {} as Record<string, string>);\n }, [data, getFluentPalette, lightenColor, theme]);\n\n const toggleSeries = React.useCallback(\n (label: string) => {\n setVisibleSeries(prev => {\n const isVisible = prev.includes(label);\n const next = isVisible\n ? prev.filter(l => l !== label)\n : [...prev, label];\n return next.length === 0 ? [data[0].label] : next;\n });\n },\n [data]\n );\n\n const allLabels = useMemo(() => {\n const set = new Set<string | number>();\n data.forEach(series => {\n series.data.forEach(d => set.add(getPrimary(d)));\n });\n return Array.from(set);\n }, [data, getPrimary]);\n\n const totalPerPoint = useMemo(() => {\n return allLabels.map(cat =>\n data.reduce((sum, series) => {\n const match = series.data.find(d => getPrimary(d) === cat);\n return sum + (match ? getSecondary(match) : 0);\n }, 0)\n );\n }, [allLabels, data, getPrimary, getSecondary]);\n\n const chartData = useMemo(() => {\n return {\n labels: allLabels,\n datasets: data\n .filter(series => visibleSeries.includes(series.label))\n .map((series, ) => ({\n label: series.label,\n fill: true,\n backgroundColor: seriesColors[series.label],\n borderColor: 'transparent',\n borderWidth: 0,\n data: allLabels.map((cat, index) => {\n const match = series.data.find(d => getPrimary(d) === cat);\n const rawValue = match ? getSecondary(match) : 0;\n const total = totalPerPoint[index] || 1;\n return showPercent\n ? Math.round(((rawValue / total) * 100 + Number.EPSILON) * 100) / 100\n : Math.round((rawValue + Number.EPSILON) * 100) / 100;\n }),\n tension: 0.5,\n })),\n };\n }, [\n data,\n visibleSeries,\n allLabels,\n getPrimary,\n getSecondary,\n seriesColors,\n totalPerPoint,\n showPercent,\n ]);\n\nconst { fontFamily, fontSize, labelColor, gridColor } = useMemo(() => ({\n fontFamily: theme.fontFamilyBase,\n fontSize: parseInt(theme.fontSizeBase200.replace('px', '')) || 14,\n labelColor: theme.colorNeutralForeground1,\n gridColor: theme.colorNeutralStroke2,\n}), [theme]);\n\nconst options = useMemo<ChartOptions<'line'>>(() => ({\n responsive: true,\n maintainAspectRatio: false,\n animation: {\n duration: 800,\n easing: 'easeOutQuart',\n },\n plugins: {\n title: {\n display: !!title,\n text: title,\n font: {\n size: 14,\n family: theme.fontFamilyBase,\n weight: theme.fontWeightSemibold,\n },\n color: theme.colorNeutralForeground1,\n padding: {\n top: 20,\n bottom: 20,\n },\n },\n datalabels: {\n display: showDataLabels,\n color: theme.colorNeutralForeground1,\n font: {\n family: theme.fontFamilyBase,\n size: parseInt(theme.fontSizeBase200.replace('px', '')) || 14,\n },\n },\n legend: { display: false },\n tooltip: createFluentTooltip<'line'>(theme),\n },\n interaction: {\n mode: 'index',\n intersect: false,\n },\n scales: {\n x: {\n stacked: true,\n ticks: {\n color: labelColor,\n font: { family: fontFamily, size: fontSize },\n },\n grid: { color: gridColor },\n },\n y: {\n stacked: true,\n ticks: {\n callback: (value: string | number) => (showPercent ? `${value}%` : value),\n color: labelColor,\n font: { family: fontFamily, size: fontSize },\n },\n grid: { color: gridColor },\n min: 0,\n max: showPercent ? 100 : undefined,\n },\n },\n}), [\n theme,\n title,\n showDataLabels,\n createFluentTooltip,\n labelColor,\n fontFamily,\n fontSize,\n gridColor,\n showPercent,\n]);\n\n return (\n <div className={styles.chartWithLegend}>\n <div className={styles.chartArea}>\n <Line data={chartData} options={options} />\n </div>\n <Stack justifyContent=\"center\" alignItems=\"center\" margin=\"7px\">\n <ToggleButton\n onClick={() => setShowPercent(p => !p)}\n shape=\"circular\"\n appearance=\"secondary\"\n size=\"small\"\n style={{ width: '150px' }}\n >\n {showPercent ? 'Show Raw Values' : 'Show %'}\n </ToggleButton>\n </Stack>\n <div className={styles.legendArea}>\n <RenderLegend\n data={data}\n visibleSeries={visibleSeries}\n seriesColors={seriesColors}\n toggleSeries={toggleSeries}\n />\n </div>\n </div>\n );\n}\n","import {\n ChartType,\n TooltipCallbacks,\n TooltipItem,\n TooltipModel,\n TooltipOptions,\n} from 'chart.js';\nimport { Theme, webLightTheme } from '@fluentui/react-components';\n\nimport AreaChart from '../charts/areaChart/AreaChart';\nimport BarChart from '../charts/BarChart/BarChart';\nimport BarHorizontalChart from '../charts/barHorizontalChart/BarHotizontalChart';\nimport BubbleChart from '../charts/bubbleChart/BubbleChart';\nimport ComboChart from '../charts/ComboChart/ComboChart';\nimport DoughnutChart from '../charts/Doughnut/DoughnutChart';\nimport FloatingBarChart from '../charts/floatBarChart/FloatBarChart';\nimport { IChart } from '../models/IChart';\nimport LineChart from '../charts/lineChart/LineChart';\nimport PieChart from '../charts/PieChart/PieChart';\nimport PolarChart from '../charts/polarChart/PolarChart';\nimport RadarChart from '../charts/radarChart/RadarChart';\nimport React from 'react';\nimport ScatterChart from '../charts/scatterChart/ScatterChart';\nimport StackedLineChart from '../charts/stackedLineChart/StackedLineChart';\nimport SteamChart from '../charts/steamChart/SteamChart';\nimport { useMemo } from 'react';\n\n/**\n * Lightens a given hex color by a percentage amount (0 to 1).\n */\nexport const lightenColor = (hex: string, amount: number): string => {\n if (!/^#?[0-9A-Fa-f]{6}$/.test(hex)) return hex;\n if (hex.startsWith('#')) hex = hex.slice(1);\n\n let r = parseInt(hex.slice(0, 2), 16);\n let g = parseInt(hex.slice(2, 4), 16);\n let b = parseInt(hex.slice(4, 6), 16);\n\n r = Math.min(255, Math.floor(r + (255 - r) * amount));\n g = Math.min(255, Math.floor(g + (255 - g) * amount));\n b = Math.min(255, Math.floor(b + (255 - b) * amount));\n\n const toHex = (v: number) => v.toString(16).padStart(2, '0');\n return `#${toHex(r)}${toHex(g)}${toHex(b)}`;\n};\n\nexport const getFluentPalette = (_theme: Theme): string[] => [\n '#4e79a7',\n '#f28e2c',\n '#e15759',\n '#76b7b2',\n '#59a14f',\n '#edc949',\n '#af7aa1',\n '#ff9da7',\n '#9c755f',\n '#bab0ab',\n '#8cd17d',\n '#b6992d',\n '#d37295',\n '#fabfd2',\n '#79706e',\n];\n\nconst chartProps = (chart: IChart) => ({\n data: chart.data,\n title: chart.title,\n getPrimary: (d: any) => d.name,\n getSecondary: (d: any) => d.value,\n});\n\nconst getChartComponent = (chart: IChart, theme: Theme) => {\n const { type } = chart;\n const fuiTheme = theme ?? webLightTheme; \n switch (type) {\n case 'bar':\n return <BarChart {...chartProps(chart)} stacked={false} theme={fuiTheme} />;\n case 'line':\n return <LineChart {...chartProps(chart)} theme={fuiTheme} />;\n case 'area':\n return <AreaChart {...chartProps(chart)} stacked={false} theme={fuiTheme} />;\n\n case 'bar-horizontal':\n return <BarHorizontalChart {...chartProps(chart)} stacked={true} theme={fuiTheme} />;\n case 'bubble':\n return (\n <BubbleChart {...chartProps(chart)} getRadius={d => d.radius ?? 1} theme={fuiTheme} />\n );\n case 'multiple-axes':\n return (\n <ComboChart\n {...chartProps(chart)}\n theme={fuiTheme}\n \n data={chart.data.map((series: any) => ({\n label: series.label,\n type: series.type ?? 'bar',\n data: series.data,\n yAxisID: series.secondaryAxisId,\n \n }))}\n />\n );\n case 'steam':\n return <SteamChart {...chartProps(chart)} theme={fuiTheme} />;\n case 'floating-bar':\n return (\n <FloatingBarChart\n getRange={d => [d.min ?? 0, d.max ?? 0]}\n {...chartProps(chart)}\n theme={fuiTheme}\n />\n );\n case 'stacked-line':\n return <StackedLineChart {...chartProps(chart)} theme={fuiTheme} />;\n case 'doughnut':\n return (\n <DoughnutChart\n getLabel={datum => datum.name}\n getValue={datum => datum.value ?? 0}\n {...chartProps(chart)}\n theme={fuiTheme}\n />\n );\n case 'pie':\n return (\n <PieChart\n getLabel={datum => datum.name}\n getValue={datum => datum.value ?? 0}\n showDataLabels={true}\n {...chartProps(chart)}\n theme={fuiTheme}\n />\n );\n case 'scatter':\n return (\n <ScatterChart\n getX={d => {\n if (typeof d.x === 'number') return d.x;\n if (typeof d.x === 'string') return Number(d.x) || 0;\n if (d.x instanceof Date) return d.x.getTime();\n return 0;\n }}\n getY={d => (typeof d.y === 'number' ? d.y : 0)}\n {...chartProps(chart)}\n theme={fuiTheme}\n showDataLabels={false}\n />\n );\n case 'polar':\n return (\n <PolarChart\n data={chart.data}\n getLabel={d => d.name}\n getValue={d => d.value ?? 0}\n title={chart.title}\n showDataLabels={true} \n theme={fuiTheme}\n />\n );\n case 'radar':\n return (\n <RadarChart\n data={chart.data}\n getLabel={d => d.name}\n getValue={d => d.value ?? 0}\n title={chart.title}\n theme={fuiTheme}\n />\n );\n\n default:\n throw new Error(`Unsupported chart type: ${type}`);\n }\n};\n\n/**\n * Smart Fluent tooltip generator with chart-type awareness.\n */\n\nexport function createFluentTooltip<TType extends ChartType>(\n theme: Theme\n): Partial<TooltipOptions<TType>> {\n const fontFamily = theme.fontFamilyBase;\n const fontSize = parseInt(theme.fontSizeBase200.replace('px', '')) || 14;\n const tooltipBg = theme.colorNeutralBackground1;\n const tooltipTitleColor = theme.colorNeutralForeground1;\n const tooltipBodyColor = theme.colorNeutralForeground2;\n const borderColor = theme.colorNeutralStroke2;\n\n const callbacks: TooltipCallbacks<TType> = {\n title(this: TooltipModel<TType>, context: TooltipItem<TType>[]) {\n return context[0]?.label ?? '';\n },\n\n label(this: TooltipModel<TType>, item: TooltipItem<TType>) {\n const datasetLabel =\n 'label' in (item.dataset as Record<string, any>) &&\n typeof (item.dataset as Record<string, any>).label === 'string'\n ? (item.dataset as Record<string, any>).label\n : 'Value';\n\n const raw = item.raw;\n\n // Bubble format { x, y, r }\n if (\n typeof raw === 'object' &&\n raw !== null &&\n 'x' in raw &&\n 'y' in raw &&\n 'r' in raw\n ) {\n const { x, y, r } = raw as any;\n return `${datasetLabel} — x: ${x}, y: ${y}, r: ${r}`;\n }\n\n // Scatter format { x, y }\n if (typeof raw === 'object' && raw !== null && 'x' in raw && 'y' in raw) {\n const { x, y } = raw as any;\n return `${datasetLabel} — x: ${x}, y: ${y}`;\n }\n\n // Floating bar [min, max]\n if (Array.isArray(raw) && raw.length === 2) {\n const [min, max] = raw;\n return `${datasetLabel}: ${min} – ${max}`;\n }\n\n // Default: single number or string\n return `${datasetLabel}: ${raw}`;\n },\n\n beforeTitle: () => '',\n afterTitle: () => '',\n beforeBody: () => '',\n afterBody: () => '',\n beforeLabel: () => '',\n afterLabel: () => '',\n labelColor: () => undefined as any,\n labelTextColor: () => '',\n footer: () => '',\n beforeFooter: () => '',\n afterFooter: () => '',\n labelPointStyle: () => ({\n pointStyle: 'circle',\n rotation: 0,\n radius: 5,\n }),\n };\n\n return {\n enabled: true,\n displayColors: true,\n boxWidth: 10,\n boxHeight: 10,\n boxPadding: 5,\n backgroundColor: tooltipBg,\n borderColor,\n borderWidth: 1,\n cornerRadius: 4,\n padding: 10,\n titleColor: tooltipTitleColor,\n bodyColor: tooltipBodyColor,\n titleFont: { family: fontFamily, size: fontSize },\n bodyFont: { family: fontFamily, size: fontSize },\n callbacks,\n };\n}\n\n\n/**\n * Returns a Chart.js ticks callback to truncate long labels and add optional prefix/suffix.\n */\nexport const createAxisLabelFormatter = ({\n maxLength = 12,\n suffix = '',\n prefix = '',\n}: {\n maxLength?: number;\n suffix?: string;\n prefix?: string;\n}) => {\n return function (this: any, value: string | number): string {\n const label = typeof value === 'number' ? this.getLabelForValue(value) : String(value);\n const trimmed = label.length > maxLength ? label.slice(0, maxLength) + '…' : label;\n return `${prefix}${trimmed}${suffix}`;\n };\n};\n\n\nfunction debounce<T extends (...args: any[]) => void>(fn: T, delay: number): T {\n let timer: ReturnType<typeof setTimeout> | null = null;\n return function(this: any, ...args: any[]) {\n if (timer) clearTimeout(timer);\n timer = setTimeout(() => fn.apply(this, args), delay);\n } as T;\n}\n\n/**\n * useGraphUtils — shared theming and chart helpers.\n */\nexport function useGraphUtils(theme?: Theme) {\n return useMemo(\n () => ({\n lightenColor,\n getFluentPalette,\n getChartComponent,\n createFluentTooltip,\n createAxisLabelFormatter,\n debounce\n }),\n [theme]\n );\n}\n","import {\n BarElement,\n CategoryScale,\n Chart as ChartJS,\n ChartOptions,\n Legend,\n LinearScale,\n Title,\n Tooltip,\n} from 'chart.js';\nimport React, { useMemo, useState } from 'react';\nimport { createAxisLabelFormatter, useGraphUtils } from '../../hooks/useGraphUtils';\n\nimport { Bar } from 'react-chartjs-2';\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\nimport RenderLegend from '../../components/RenderLegend/RenderLegend';\nimport { Theme } from '@fluentui/react-components';\nimport { useGraphGlobalStyles } from '../../graphGlobalStyles/useGraphGlobalStyles';\n\nChartJS.register(\n CategoryScale,\n LinearScale,\n BarElement,\n Tooltip,\n Legend,\n ChartDataLabels,\n Title\n);\n\nexport interface BarProps<T> {\n data: { label: string; data: T[]; type?: 'bar' | 'line' }[];\n getPrimary: (datum: T) => string | number;\n getSecondary: (datum: T) => number;\n stacked?: boolean;\n title?: string;\n showDatalabels?: boolean;\n theme: Theme;\n}\n\nexport default function BarChart<T extends object>({\n data,\n getPrimary,\n getSecondary,\n title,\n showDatalabels = false,\n stacked = false,\n theme,\n}: BarProps<T>) {\n const [visibleSeries, setVisibleSeries] = useState(() =>\n data.length > 1 ? data.map(s => s.label) : [data[0]?.label]\n );\n\n const { lightenColor, getFluentPalette, createFluentTooltip } = useGraphUtils(\n theme\n );\n const styles = useGraphGlobalStyles();\n const seriesColors = useMemo(() => {\n return data.reduce((acc, series, idx) => {\n const base = getFluentPalette(theme)[\n idx % getFluentPalette(theme).length\n ];\n const color = lightenColor(base, 0.3);\n acc[series.label] = color;\n return acc;\n }, {} as Record<string, string>);\n }, [data]);\n\n const toggleSeries = (label: string) => {\n setVisibleSeries(prev => {\n const isVisible = prev.includes(label);\n const next = isVisible ? prev.filter(l => l !== label) : [...prev, label];\n return next.length === 0 && data.length > 0 ? [data[0].label] : next;\n });\n };\n\n // Extract all unique x-axis categories (from all series)\n const allCategories = useMemo(() => {\n const categorySet = new Set<string | number>();\n data.forEach(series => {\n series.data.forEach(datum => {\n categorySet.add(getPrimary(datum));\n });\n });\n return Array.from(categorySet);\n }, [data, getPrimary]);\n\n // Construct Chart.js datasets\n const chartData = useMemo(() => {\n return {\n labels: allCategories,\n datasets: data\n .filter(series => visibleSeries.includes(series.label))\n .map(series => ({\n label: series.label,\n backgroundColor: seriesColors[series.label],\n data: allCategories.map(cat => {\n const found = series.data.find(d => getPrimary(d) === cat);\n return found ? getSecondary(found) : 0;\n }),\n // Assign y-axis based on series type when stacked\n yAxisID: stacked ? (series.type === 'line' ? 'y1' : 'y') : 'y',\n })),\n };\n }, [data, visibleSeries, allCategories, seriesColors, stacked]);\n\n const { fontFamily, fontSize, labelColor, gridColor } = useMemo(\n () => ({\n fontFamily: theme.fontFamilyBase,\n fontSize: parseInt(theme.fontSizeBase200.replace('px', '')) || 14,\n labelColor: theme.colorNeutralForeground1,\n gridColor: theme.colorNeutralStroke2,\n }),\n [theme]\n );\n\n const options: ChartOptions<'bar'> = useMemo(\n () => ({\n responsive: true,\n maintainAspectRatio: false,\n\n plugins: {\n title: {\n display: !!title,\n text: title,\n font: {\n size: 14,\n family: theme.fontFamilyBase,\n weight: theme.fontWeightSemibold,\n },\n color: theme.colorNeutralForeground1,\n padding: {\n top: 20,\n bottom: 20,\n },\n },\n datalabels: {\n display: showDatalabels,\n color: theme.colorNeutralForeground1,\n font: {\n family: theme.fontFamilyBase,\n size: parseInt(theme.fontSizeBase200.replace('px', '')) || 14,\n },\n },\n legend: {\n display: false,\n },\n tooltip: createFluentTooltip<'bar'>(theme),\n },\n scales: {\n x: {\n stacked,\n ticks: {\n callback: createAxisLabelFormatter({ maxLength: 10 }),\n color: labelColor,\n font: {\n family: fontFamily,\n size: fontSize,\n },\n },\n grid: {\n color: gridColor,\n },\n },\n y: {\n type: 'linear',\n position: 'left',\n stacked,\n ticks: {\n callback: createAxisLabelFormatter({ maxLength: 10 }),\n color: labelColor,\n font: {\n family: fontFamily,\n size: fontSize,\n },\n },\n grid: {\n color: gridColor,\n },\n },\n ...(stacked && {\n y1: {\n type: 'linear',\n position: 'right',\n ticks: {\n callback: createAxisLabelFormatter({ maxLength: 10 }),\n color: labelColor,\n font: {\n family: fontFamily,\n size: fontSize,\n },\n },\n grid: {\n drawOnChartArea: false,\n },\n },\n }),\n },\n }),\n [\n title,\n showDatalabels,\n theme,\n fontFamily,\n fontSize,\n labelColor,\n gridColor,\n stacked,\n createFluentTooltip,\n ]\n );\n\n return (\n <div className={styles.chartWithLegend}>\n <div className={styles.chartArea}>\n <Bar data={chartData} options={options} />\n </div>\n <div className={styles.legendArea}>\n <RenderLegend\n data={data}\n visibleSeries={visibleSeries}\n seriesColors={seriesColors}\n toggleSeries={toggleSeries}\n />\n </div>\n </div>\n );\n}\n","import React from \"react\";\nimport { tokens } from \"@fluentui/react-components\";\n\ninterface BusinessReportIconProps {\n width?: number;\n height?: number;\n className?: string;\n style?: React.CSSProperties;\n}\n\nexport const BusinessReportIcon: React.FC<BusinessReportIconProps> = ({\n width = 200,\n height = 200,\n className,\n style,\n}) => {\n return (\n <svg\n width={width}\n height={height}\n viewBox=\"200 400 1400 1000\"\n className={className}\n style={{\n fill: tokens.colorNeutralForeground2,\n ...style,\n }}\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <g id=\"BACKGROUND\">\n <rect\n style={{ fill: tokens.colorNeutralBackground1 }}\n x=\"200\"\n y=\"400\"\n width=\"1400\"\n height=\"1000\"\n />\n </g>\n\n {/* Main chart/dashboard area */}\n <g>\n <g>\n <rect\n x=\"486.006\"\n y=\"568.026\"\n style={{ fill: tokens.colorNeutralBackground1 }}\n width=\"1038.994\"\n height=\"768.164\"\n />\n <path\n style={{ fill: tokens.colorNeutralStroke1 }}\n d=\"M1527.5,1338.69H483.506V565.526H1527.5V1338.69z M488.506,1333.69H1522.5V570.526H488.506V1333.69z\"\n />\n </g>\n <g>\n {/* Chart bars */}\n <rect\n x=\"558.003\"\n y=\"1086.698\"\n style={{ fill: tokens.colorNeutralForeground3, opacity: 0.3 }}\n width=\"85\"\n height=\"164.492\"\n />\n <rect\n x=\"693.003\"\n y=\"1004.672\"\n style={{ fill: tokens.colorNeutralForeground3, opacity: 0.3 }}\n width=\"85\"\n height=\"246.519\"\n />\n <rect\n x=\"828.003\"\n y=\"835.487\"\n style={{ fill: tokens.colorNeutralForeground3, opacity: 0.3 }}\n width=\"85\"\n height=\"415.703\"\n />\n <rect\n x=\"963.003\"\n y=\"955.6\"\n style={{ fill: tokens.colorNeutralForeground3, opacity: 0.3 }}\n width=\"85\"\n height=\"295.591\"\n />\n <rect\n x=\"1098.003\"\n y=\"825.238\"\n style={{ fill: tokens.colorNeutralForeground3, opacity: 0.3 }}\n width=\"85\"\n height=\"425.952\"\n />\n <rect\n x=\"1233.003\"\n y=\"847.489\"\n style={{ fill: tokens.colorNeutralForeground3, opacity: 0.3 }}\n width=\"85\"\n height=\"403.701\"\n />\n <rect\n x=\"1368.003\"\n y=\"699.989\"\n style={{ fill: tokens.colorNeutralForeground3, opacity: 0.3 }}\n width=\"85\"\n height=\"551.201\"\n />\n {/* Chart line */}\n <polygon\n style={{ fill: tokens.colorBrandBackground }}\n points=\"583.634,1185.919 581.366,1181.462 723.336,1109.231 869.748,909.808 1003.791,1050.114 1141.593,912.312 1275.235,928.549 1409.365,774.548 1413.135,777.833 1277.265,933.832 1143.407,917.569 1003.709,1057.267 870.251,917.573 726.664,1113.149\"\n />\n </g>\n {/* Chart grid lines */}\n <rect\n x=\"796.336\"\n y=\"662.857\"\n style={{ fill: tokens.colorBrandBackground }}\n width=\"418.333\"\n height=\"5\"\n />\n <rect\n x=\"937.543\"\n y=\"717.857\"\n style={{ fill: tokens.colorBrandBackground }}\n width=\"135.92\"\n height=\"5\"\n />\n </g>\n\n {/* Small chart on left */}\n <g>\n <g>\n <rect\n x=\"264.978\"\n y=\"441.049\"\n style={{ fill: tokens.colorNeutralBackground1 }}\n width=\"482.581\"\n height=\"379.067\"\n />\n <path\n style={{ fill: tokens.colorNeutralStroke1 }}\n d=\"M750.06,822.616H262.478V438.549H750.06V822.616z M267.478,817.616H745.06V443.549H267.478V817.616z\"\n />\n </g>\n <g>\n {/* Small chart elements */}\n <g>\n <rect\n x=\"330.537\"\n y=\"503.15\"\n style={{ fill: tokens.colorNeutralForeground3, opacity: 0.3 }}\n width=\"108.842\"\n height=\"61.633\"\n />\n <g>\n <rect\n x=\"485.277\"\n y=\"509.093\"\n style={{ fill: tokens.colorBrandBackground }}\n width=\"198.014\"\n height=\"2.623\"\n />\n <rect\n x=\"485.277\"\n y=\"532.656\"\n style={{ fill: tokens.colorNeutralForeground3, opacity: 0.3 }}\n width=\"198.014\"\n height=\"2.623\"\n />\n <rect\n x=\"485.277\"\n y=\"556.218\"\n style={{ fill: tokens.colorNeutralForeground3, opacity: 0.3 }}\n width=\"198.014\"\n height=\"2.623\"\n />\n </g>\n </g>\n {/* Bar chart elements */}\n <g>\n <g>\n <rect\n x=\"381.691\"\n y=\"687.747\"\n style={{ fill: tokens.colorNeutralForeground3, opacity: 0.3 }}\n width=\"22.73\"\n height=\"70.417\"\n />\n <rect\n x=\"404.421\"\n y=\"653.482\"\n style={{ fill: tokens.colorBrandBackground }}\n width=\"22.73\"\n height=\"104.682\"\n />\n </g>\n <g>\n <rect\n x=\"466.491\"\n y=\"641.634\"\n style={{ fill: tokens.colorNeutralForeground3, opacity: 0.3 }}\n width=\"22.73\"\n height=\"116.089\"\n />\n <rect\n x=\"489.221\"\n y=\"714.758\"\n style={{ fill: tokens.colorBrandBackground }}\n width=\"22.73\"\n height=\"42.965\"\n />\n </g>\n </g>\n </g>\n </g>\n </svg>\n );\n};\n\nexport default BusinessReportIcon;\n","import * as React from 'react';\n\nimport BusinessReportIcon from '../svgImages/BusinessReportIcon';\nimport Stack from '../stack/Stack';\nimport { Text } from '@fluentui/react-components';\n\nexport interface INoDashboardsProps {\n height?: string;\n}\n\nexport const NoDashboards: React.FunctionComponent<INoDashboardsProps> = (props: React.PropsWithChildren<INoDashboardsProps>) => {\n const { height } = props;\n\n return (\n <>\n <Stack\n style={{ height: height || \"100%\" }}\n justifyContent=\"Center\"\n alignItems=\"Center\"\n >\n <BusinessReportIcon width={200} height={200} />\n <Text size={500} weight='semibold'>No Dashboards Available</Text>\n </Stack>\n </>\n );\n};","/* eslint-disable @typescript-eslint/explicit-function-return-type */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n makeStyles,\n shorthands,\n} from '@fluentui/react-components';\n\nexport const useRenderLabelStyles = makeStyles({\n\n labelContainer: {\n display: \"flex\",\n flexDirection: \"row\",\n justifyContent: \"flex-start\",\n alignItems: \"center\",\n ...shorthands.gap(\"6px\"),\n },\n iconStyles: {\n width: \"26px\",\n },\n item: {\n paddingLeft: \"15px\",\n },\n \n\n});\n","import * as React from 'react';\n\nimport {\n Caption1,\n tokens,\n} from '@fluentui/react-components';\nimport { Icon } from '@iconify/react';\n\nimport { useRenderLabelStyles } from './useRenderLabelStylesStyles';\n\nexport interface IRenderLabelProps {\n label: string; icon?: string | JSX.Element; isRequired?: boolean\n}\n\nexport const RenderLabel: React.FunctionComponent<IRenderLabelProps> = (props: React.PropsWithChildren<IRenderLabelProps>) => {\n const { label, icon, isRequired } = props;\n const styles = useRenderLabelStyles();\n return (\n <>\n <div className={styles.labelContainer}>\n {icon && React.isValidElement(icon) ? (\n icon\n ) : (\n <Icon\n icon={icon as string}\n className={styles.iconStyles}\n width={\"20px\"}\n height={\"20px\"}\n color={tokens.colorBrandForeground1}\n />\n )}\n <Caption1 style={{ color: tokens.colorBrandForeground1 }}>{label}</Caption1>\n <Caption1 style={{ color: tokens.colorPaletteRedForeground1 }}>{isRequired ? \" *\" : \"\"}</Caption1>\n </div>\n </>\n );\n};\n\nexport default RenderLabel;\n","import * as React from \"react\";\n\nimport {\n Caption1,\n Menu,\n MenuButton,\n MenuPopover,\n MenuProps,\n MenuTrigger,\n Tooltip,\n tokens,\n} from \"@fluentui/react-components\";\nimport {\n Settings20Filled,\n Settings20Regular,\n bundleIcon,\n} from \"@fluentui/react-icons\";\n\nimport { Icon } from \"@iconify/react\";\nimport { RenderLabel } from \"../../RenderLabel\";\nimport { css } from \"@emotion/css\";\n\nexport interface ISelectZoomProps {\n IsOpen: boolean;\n onChange?: (value: { spanCols: number; spanRows: number }) => void;\n values: { spanCols: number; spanRows: number };\n maxCols: number;\n maxRows: number;\n}\n\nconst useStyles = (): {\n gridContainer: string;\n cell: string;\n hoveredCell: string;\n selectedCell: string;\n menuPopover: string;\n bottomText: string;\n} => ({\n gridContainer: css`\n display: grid;\n gap: 4px;\n padding: 8px;\n justify-content: center;\n `,\n cell: css`\n width: 30px;\n height: 30px;\n border: 1px solid ${tokens.colorNeutralStroke1};\n background-color: ${tokens.colorNeutralBackground1};\n cursor: pointer;\n transition: background-color 150ms ease, transform 150ms ease;\n will-change: background-color, transform;\n `,\n hoveredCell: css`\n background-color: ${tokens.colorNeutralBackground1Hover};\n transform: scale(1.05);\n `,\n selectedCell: css`\n background-color: ${tokens.colorNeutralBackground1Selected};\n `,\n menuPopover: css`\n min-width: fit-content;\n `,\n bottomText: css`\n padding-left: 8px;\n padding-right: 8px;\n `,\n \n \n});\n\nexport const SelectZoom: React.FunctionComponent<ISelectZoomProps> = (\n props: React.PropsWithChildren<ISelectZoomProps>\n) => {\n const { onChange, values: defaultValues, maxCols, maxRows } = props;\n const Settings = bundleIcon(Settings20Filled, Settings20Regular);\n const styles = useStyles();\n\n const [values, setValues] = React.useState(defaultValues);\n const [hovered, setHovered] = React.useState<{\n spanCols: number;\n spanRows: number;\n } | null>(null);\n const [open, setOpen] = React.useState(false);\n\n React.useEffect(() => {\n setValues(defaultValues);\n }, [defaultValues]);\n\n const onOpenChange: MenuProps[\"onOpenChange\"] = (_, data) => {\n setOpen(data.open);\n setHovered(null);\n };\n\n const handleCellClick = (row: number, col: number):void => {\n const newValues = { spanCols: col + 1, spanRows: row + 1 };\n setValues(newValues);\n onChange?.(newValues);\n setOpen(false);\n };\n\n const handleCellHover = (row: number, col: number):void => {\n setHovered({ spanCols: col + 1, spanRows: row + 1 });\n };\n\n const handleMouseLeave = ():void => {\n setHovered(null);\n };\n\n const renderGridCells = (): React.ReactNode[] => {\n const cells: React.ReactNode[] = [];\n for (let row = 0; row < maxRows; row++) {\n for (let col = 0; col < maxCols; col++) {\n const isSelected = row < values.spanRows && col < values.spanCols;\n const isHovered =\n hovered && row < hovered.spanRows && col < hovered.spanCols;\n cells.push(\n <div\n key={`${row}-${col}`}\n className={`${styles.cell} ${isHovered ? styles.hoveredCell : \"\"} ${\n isSelected ? styles.selectedCell : \"\"\n }`}\n onMouseEnter={() => handleCellHover(row, col)}\n onClick={() => handleCellClick(row, col)}\n />\n );\n }\n }\n return cells;\n };\n\n // Compute popover width dynamically\n const popoverWidth = React.useMemo(() => (30 * maxCols) + (4 * (maxCols - 1)) + 32, [maxCols]); // 30px for each cell, 4px gap, and 32px padding (16 left and right)\n\n return (\n <Menu open={open} onOpenChange={onOpenChange}>\n <MenuTrigger disableButtonEnhancement>\n <Tooltip content=\"Configure\" relationship=\"label\">\n <MenuButton\n icon={<Settings />}\n size=\"small\"\n appearance=\"transparent\"\n />\n </Tooltip>\n </MenuTrigger>\n\n <MenuPopover\n style={{ width: `${popoverWidth}px`, minWidth: \"120px\", padding: 8 }}\n >\n <div\n style={{\n display: \"flex\",\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: \"6px\",\n width: \"100%\",\n boxSizing: \"border-box\",\n padding: \"8px\",\n }}\n >\n <RenderLabel\n label={`Selected Span (${values.spanCols} × ${values.spanRows})`}\n icon={\n <Icon\n icon=\"fluent:number-row-20-regular\"\n width=\"32\"\n height=\"32\"\n />\n }\n />\n </div>\n\n {/* Grid */}\n <div\n className={styles.gridContainer}\n style={{\n gridTemplateColumns: `repeat(${maxCols}, 30px)`,\n gridTemplateRows: `repeat(${maxRows}, 30px)`,\n }}\n onMouseLeave={handleMouseLeave}\n >\n {renderGridCells()}\n </div>\n\n <Caption1 className={styles.bottomText}>Click to set span</Caption1>\n </MenuPopover>\n </Menu>\n );\n};\n","'use client';\n\nimport { Card, CardHeader, Text, Theme } from '@fluentui/react-components';\nimport React, {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\n\nimport { ICardChartContainer } from '../../models/ICardChartContainer';\nimport { IDashboardProps } from './IDashboardProps';\nimport { NoDashboards } from './NoDashboards';\nimport { SelectZoom } from './selectZoom/SelectZoom';\nimport { useDashboardStyles } from './useDashboardStyles';\nimport { useGraphUtils } from '../../hooks';\n\nconst MINIMUM_DASHBOARD_WIDTH = 600;\nconst MAX_ROWS = 4;\n\nexport const Dashboard: React.FC<IDashboardProps> = ({\n cardCharts,\n theme,\n containerWidth,\n containerHeight = '100%',\n maxSpanRows = MAX_ROWS,\n}) => {\n const styles = useDashboardStyles();\n\n const { getChartComponent } = useGraphUtils(theme as Theme);\n\n const [CardChartContainer, setCardChartContainer] = useState<\n ICardChartContainer[]\n >([]);\n\n const [sizes, setSizes] = useState<\n Record<string, { spanCols: number; spanRows: number }>\n >({});\n const dragItem = useRef<number | null>(null);\n const dragOverItem = useRef<number | null>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n\n React.useEffect(() => {\n setCardChartContainer(cardCharts);\n setSizes(() => {\n const initialSizes: Record<\n string,\n { spanCols: number; spanRows: number }\n > = {};\n cardCharts.forEach(c => {\n initialSizes[c.id] = {\n spanCols: c.defaultSpan?.spanCols ?? 1,\n spanRows: c.defaultSpan?.spanRows ?? 1,\n };\n });\n return initialSizes;\n });\n }, [cardCharts]);\n\n useEffect(() => {\n if (containerWidth <= MINIMUM_DASHBOARD_WIDTH) {\n setSizes(() => {\n const reset: Record<\n string,\n { spanCols: number; spanRows: number }\n > = {};\n CardChartContainer.forEach(c => {\n reset[c.id] = { spanCols: 1, spanRows: 1 };\n });\n return reset;\n });\n }\n }, [containerWidth, CardChartContainer]);\n\n const showZoom = useMemo(() => containerWidth > MINIMUM_DASHBOARD_WIDTH, [\n containerWidth,\n ]);\n\n const { minCardWidth, gridGap, containerPadding } = useMemo(\n () => ({\n minCardWidth: 350,\n gridGap: 16,\n containerPadding: 20,\n }),\n []\n );\n\n const innerWidth = containerWidth - containerPadding * 2;\n const columns = useMemo(\n () => Math.floor((innerWidth + gridGap) / (minCardWidth + gridGap)),\n [innerWidth, gridGap, minCardWidth]\n );\n const maxZoom = Math.max(columns, 1);\n\n const handleSort = useCallback(() => {\n if (\n dragItem.current !== null &&\n dragOverItem.current !== null &&\n dragItem.current !== dragOverItem.current\n ) {\n const copy = [...CardChartContainer];\n const [moved] = copy.splice(dragItem.current, 1);\n copy.splice(dragOverItem.current, 0, moved);\n setCardChartContainer(copy);\n }\n dragItem.current = null;\n dragOverItem.current = null;\n }, [CardChartContainer]);\n\n const handleZoomSelect = useCallback(\n (id: string, span: { spanCols: number; spanRows: number }) => {\n setSizes(prev => ({\n ...prev,\n [id]: {\n spanCols: Math.min(Math.max(span.spanCols, 1), maxZoom),\n spanRows: Math.min(Math.max(span.spanRows, 1), maxSpanRows),\n },\n }));\n },\n [maxZoom, maxSpanRows]\n );\n\n const defaultColsAndRowSpanBasedOnNumberColumns = useMemo(() => {\n return CardChartContainer.reduce((acc, card) => {\n acc[card.id] = {\n spanCols: Math.min(card.defaultSpan?.spanCols ?? 1, columns),\n spanRows: card.defaultSpan?.spanRows ?? 1,\n };\n return acc;\n }, {} as Record<string, { spanCols: number; spanRows: number }>);\n }, [CardChartContainer, columns]);\n\n const renderCards = useMemo(() => {\n return CardChartContainer.map((cardContainer, idx) => (\n <div\n className={styles.cardWrapper}\n key={cardContainer.id}\n draggable\n onDragStart={() => (dragItem.current = idx)}\n onDragEnter={() => (dragOverItem.current = idx)}\n onDragOver={e => e.preventDefault()}\n onDragEnd={handleSort}\n style={{\n gridColumnEnd: sizes[cardContainer.id]?.spanCols\n ? `span ${sizes[cardContainer.id].spanCols}`\n : `span ${defaultColsAndRowSpanBasedOnNumberColumns[\n cardContainer.id\n ]?.spanCols || 1}`,\n gridRowEnd: sizes[cardContainer.id]?.spanRows\n ? `span ${sizes[cardContainer.id].spanRows}`\n : `span ${defaultColsAndRowSpanBasedOnNumberColumns[\n cardContainer.id\n ]?.spanRows || 1}`,\n }}\n >\n <Card className={styles.cardBody}>\n <CardHeader\n header={\n <Text weight=\"semibold\" size={400}>\n {cardContainer.cardTitle}\n </Text>\n }\n action={\n showZoom ? (\n <SelectZoom\n values={\n sizes[cardContainer.id] ||\n defaultColsAndRowSpanBasedOnNumberColumns[\n cardContainer.id\n ] || { spanCols: 1, spanRows: 1 }\n }\n maxCols={maxZoom}\n maxRows={maxSpanRows}\n IsOpen={false}\n onChange={v => handleZoomSelect(cardContainer.id, v)}\n />\n ) : (\n undefined\n )\n }\n />\n <div\n className={styles.chartContainer}\n style={{ height: containerHeight }}\n >\n {theme &&\n theme.fontSizeBase100 &&\n getChartComponent(cardContainer.chart, theme as Theme)}\n </div>\n </Card>\n </div>\n ));\n }, [\n CardChartContainer,\n handleSort,\n sizes,\n styles.cardBody,\n styles.chartContainer,\n showZoom,\n maxZoom,\n getChartComponent,\n handleZoomSelect,\n theme,\n ]);\n\n if (CardChartContainer.length === 0) {\n return <NoDashboards />;\n }\n\n return (\n <>\n <div ref={containerRef} className={styles.dashboardContainer}>\n {renderCards}\n </div>\n </>\n );\n};\n\nexport default Dashboard;\n","import { css } from '@emotion/css';\nimport { tokens } from '@fluentui/react-components';\n\nexport const useDashboardStyles = (): {\n dashboardContainer: string;\n cardBody: string;\n chartContainer: string;\n cardDescription: string;\n cardWrapper: string;\n} => {\n return {\n dashboardContainer: css({\n display: 'grid',\n padding: '20px',\n gap: '16px',\n backgroundColor: tokens.colorNeutralBackground2,\n gridTemplateColumns: 'repeat(auto-fill, minmax(350px, 1fr))',\n gridAutoRows: '350px',\n overflowY: 'auto',\n overflowX: 'hidden',\n\n // Scrollbar styles\n '::-webkit-scrollbar': {\n width: '5px', // Width for vertical scrollbars\n height: '5px', // Height for horizontal scrollbars\n },\n '::-webkit-scrollbar-track': {\n background: tokens.colorNeutralBackground4, // Light gray for the track\n borderRadius: '10px',\n },\n '::-webkit-scrollbar-thumb': {\n background: tokens.colorBrandStroke2Hover, // Dark gray for the thumb\n borderRadius: '10px',\n },\n '::-webkit-scrollbar-thumb:hover': {\n background: tokens.colorNeutralStroke2, // Dark gray for the thumb\n },\n\n justifyContent: 'center',\n gridAutoFlow: 'dense',\n }),\n cardBody: css({\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n minHeight: '320px',\n }),\n chartContainer: css({\n flex: 1,\n width: '100%',\n minHeight: '280px',\n }),\n cardDescription: css({\n color: `${tokens.colorNeutralForeground2}`,\n marginTop: '4px',\n }),\n\n cardWrapper: css({\n position: 'relative',\n height: '100%',\n minHeight: '300px',\n borderRadius: tokens.borderRadiusMedium,\n transition: 'all 0.2s ease',\n\n '&:hover': {\n transform: 'translateY(-2px)',\n boxShadow: `${tokens.shadow16}`,\n },\n\n '&:active': {\n transform: 'translateY(0)',\n boxShadow: `${tokens.shadow8}`,\n },\n }),\n };\n};\n"],"names":["LegendButton","_ref","label","isVisible","color","_ref$style","style","React","Tooltip","content","relationship","Button","ref","buttonRef","shape","size","appearance","onClick","_extends","backgroundColor","tokens","colorNeutralForeground1","borderColor","borderWidth","width","padding","textAlign","Caption1","as","display","overflow","textOverflow","whiteSpace","lineHeight","sizeMap","xs","spacingHorizontalXS","s","spacingHorizontalS","m","spacingHorizontalM","l","spacingHorizontalL","xl","spacingHorizontalXL","xxl","spacingHorizontalXXL","Stack","memo","direction","_ref$justifyContent","justifyContent","_ref$alignItems","alignItems","gap","columnGap","rowGap","margin","marginTop","marginBottom","marginLeft","marginRight","paddingTop","paddingBottom","paddingLeft","paddingRight","_ref$wrap","wrap","children","className","stackStyle","css","flexDirection","_ref$direction","height","flexWrap","background","mergeClasses","displayName","styles","wrapper","boxSizing","LegendContainer","props","overflowItems","visibleLabels","toggleLabel","renderLabel","getColor","containerRef","visibleItems","map","item","length","includes","key","Menu","MenuTrigger","disableButtonEnhancement","MenuButton","MenuPopover","minWidth","maxWidth","MenuList","MenuItem","useResponsiveLegend","items","useRef","_useState","useState","maxVisible","setMaxVisible","debounce","useGraphUtils","useEffect","measure","containerWidth","_containerRef$current","_containerRef$current2","current","offsetWidth","count","Math","floor","BUTTON_WIDTH","debouncedMeasure","observer","ResizeObserver","observe","disconnect","slice","RenderLegend","data","visibleSeries","seriesColors","toggleSeries","_useResponsiveLegend","d","useGraphGlobalStyles","chartWithLegend","chartArea","flexGrow","minHeight","_templateObject","_taggedTemplateLiteralLoose","legendArea","_templateObject2","AreaChart","getPrimary","getSecondary","title","_ref$showDatalabels","showDatalabels","_ref$theme","theme","webLightTheme","_ref$stacked","stacked","_data$","setVisibleSeries","_useGraphUtils","lightenColor","getFluentPalette","createFluentTooltip","useMemo","reduce","acc","series","idx","base","allCategories","set","Set","forEach","add","Array","from","chartData","labels","datasets","filter","cat","match","find","fill","tension","pointRadius","_useMemo","fontFamily","fontFamilyBase","fontSize","parseInt","fontSizeBase200","replace","labelColor","gridColor","colorNeutralStroke2","options","responsive","maintainAspectRatio","plugins","text","font","family","weight","fontWeightSemibold","top","bottom","datalabels","legend","tooltip","scales","x","ticks","grid","y","Line","prev","next","concat","BarHorizontalChart","categorySet","datum","found","indexAxis","Bar","BubbleChart","getRadius","showDataLabels","r","colorNeutralStroke1","hoverBorderWidth","_data$2","type","Bubble","ComboChart","_ref$showDataLabels","sortedSeries","sort","a","b","_series$yAxisID","yAxisID","order","position","Chart","register","CategoryScale","LinearScale","PointElement","LineElement","Filler","Legend","ChartDataLabels","Title","ChartJS","BarElement","RenderValueLegend","entries","entry","value","DoughnutChart","getLabel","getValue","hiddenLabels","setHiddenLabels","valueMap","Map","get","allLabels","keys","palette","colors","_","i","_useMemo2","filteredLabels","values","visibleColors","indexOf","legendEntries","formatter","Doughnut","FloatingBarChart","getRange","borderRadius","LineChart","PieChart","Pie","ArcElement","RenderSliceLegend","PolarChart","backdropColor","PolarArea","RadarChart","pointBackgroundColor","angleLines","pointLabels","Radar","ScatterChart","getX","getY","useCallback","Scatter","StackedLineChart","SteamChart","_useState2","showPercent","setShowPercent","totalPerPoint","sum","index","rawValue","round","Number","EPSILON","animation","duration","easing","interaction","mode","intersect","callback","min","max","undefined","ToggleButton","p","RadialLinearScale","hex","amount","test","startsWith","g","toHex","v","toString","padStart","_theme","chartProps","chart","name","getChartComponent","fuiTheme","BarChart","_d$radius","radius","_series$type","secondaryAxisId","_d$min","_d$max","_datum$value","_datum$value2","Date","getTime","_d$value","_d$value2","Error","enabled","displayColors","boxWidth","boxHeight","boxPadding","colorNeutralBackground1","cornerRadius","titleColor","bodyColor","colorNeutralForeground2","titleFont","bodyFont","callbacks","context","_context$0$label","_context$","datasetLabel","dataset","raw","isArray","beforeTitle","afterTitle","beforeBody","afterBody","beforeLabel","afterLabel","labelTextColor","footer","beforeFooter","afterFooter","labelPointStyle","pointStyle","rotation","createAxisLabelFormatter","maxLength","_ref$maxLength","_ref$suffix","suffix","_ref$prefix","prefix","this","getLabelForValue","String","trimmed","fn","delay","timer","args","_len","_key","arguments","clearTimeout","setTimeout","apply","_this","y1","drawOnChartArea","BusinessReportIcon","_ref$height","_ref$width","viewBox","xmlns","id","colorNeutralForeground3","opacity","colorBrandBackground","points","NoDashboards","Text","useRenderLabelStyles","makeStyles","labelContainer","shorthands","iconStyles","RenderLabel","icon","isRequired","Icon","colorBrandForeground1","colorPaletteRedForeground1","SelectZoom","onChange","defaultValues","maxCols","maxRows","Settings","bundleIcon","Settings20Filled","Settings20Regular","gridContainer","cell","hoveredCell","_templateObject3","colorNeutralBackground1Hover","selectedCell","_templateObject4","colorNeutralBackground1Selected","menuPopover","_templateObject5","bottomText","_templateObject6","_React$useState","setValues","_React$useState2","hovered","setHovered","_React$useState3","open","setOpen","popoverWidth","onOpenChange","spanCols","spanRows","gridTemplateColumns","gridTemplateRows","onMouseLeave","cells","_loop","row","_loop2","col","push","onMouseEnter","handleCellHover","newValues","handleCellClick","renderGridCells","cardCharts","_ref$containerHeight","containerHeight","_ref$maxSpanRows","maxSpanRows","dashboardContainer","colorNeutralBackground2","gridAutoRows","overflowY","overflowX","::-webkit-scrollbar","::-webkit-scrollbar-track","colorNeutralBackground4","::-webkit-scrollbar-thumb","colorBrandStroke2Hover","::-webkit-scrollbar-thumb:hover","gridAutoFlow","cardBody","chartContainer","flex","cardDescription","cardWrapper","borderRadiusMedium","transition","&:hover","transform","boxShadow","shadow16","&:active","shadow8","CardChartContainer","setCardChartContainer","sizes","setSizes","dragItem","dragOverItem","initialSizes","c","_c$defaultSpan$spanCo","_c$defaultSpan","defaultSpan","_c$defaultSpan$spanRo","_c$defaultSpan2","reset","showZoom","minCardWidth","gridGap","containerPadding","innerWidth","columns","maxZoom","handleSort","copy","_copy$splice","splice","handleZoomSelect","span","_extends2","defaultColsAndRowSpanBasedOnNumberColumns","card","_card$defaultSpan$spa","_card$defaultSpan","_card$defaultSpan$spa2","_card$defaultSpan2","renderCards","cardContainer","_sizes$cardContainer$","_defaultColsAndRowSpa","_sizes$cardContainer$2","_defaultColsAndRowSpa2","draggable","onDragStart","onDragEnter","onDragOver","e","preventDefault","onDragEnd","gridColumnEnd","gridRowEnd","Card","CardHeader","header","cardTitle","action","IsOpen","fontSizeBase100"],"mappings":"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"}
1
+ {"version":3,"file":"fluentui-react-charts.cjs.production.min.js","sources":["../src/components/legendeButton/LegendButton.tsx","../src/components/stack/Stack.tsx","../src/components/legendContainer/LegendContainer.tsx","../src/hooks/useResponsiveLegend.ts","../src/components/RenderLegend/RenderLegend.tsx","../src/graphGlobalStyles/useGraphGlobalStyles.ts","../src/charts/areaChart/AreaChart.tsx","../src/charts/barHorizontalChart/BarHotizontalChart.tsx","../src/charts/bubbleChart/BubbleChart.tsx","../src/charts/ComboChart/ComboChart.tsx","../src/components/renderValueLegend/RenderValueLegend.tsx","../src/charts/Doughnut/DoughnutChart.tsx","../src/charts/floatBarChart/FloatBarChart.tsx","../src/charts/lineChart/LineChart.tsx","../src/charts/PieChart/PieChart.tsx","../src/components/renderSliceLegend/RenderSliceLegend.tsx","../src/charts/polarChart/PolarChart.tsx","../src/charts/radarChart/RadarChart.tsx","../src/charts/scatterChart/ScatterChart.tsx","../src/charts/stackedLineChart/StackedLineChart.tsx","../src/charts/steamChart/SteamChart.tsx","../src/hooks/useGraphUtils.tsx","../src/charts/BarChart/BarChart.tsx","../src/components/svgImages/BusinessReportIcon.tsx","../src/components/dashboard/NoDashboards.tsx","../src/components/RenderLabel/useRenderLabelStylesStyles.ts","../src/components/RenderLabel/RenderLabel.tsx","../src/components/dashboard/selectZoom/SelectZoom.tsx","../src/components/dashboard/DashBoard.tsx","../src/components/dashboard/useDashboardStyles.ts"],"sourcesContent":["// LegendButton.tsx\nimport { Button, Caption1, Tooltip, tokens } from '@fluentui/react-components';\n\nimport React from 'react';\n\ninterface LegendButtonProps {\n label: string;\n isVisible: boolean;\n color: string;\n onClick: () => void;\n style?: React.CSSProperties;\n buttonRef?: React.Ref<HTMLButtonElement>;\n}\n\nexport const LegendButton: React.FC<LegendButtonProps> = ({\n label,\n isVisible,\n color,\n onClick,\n style = {},\n buttonRef,\n}) => {\n return (\n <Tooltip content={label} relationship=\"label\">\n <Button\n ref={buttonRef}\n shape=\"circular\"\n size=\"small\"\n appearance={isVisible ? 'primary' : 'outline'}\n onClick={onClick}\n style={{\n backgroundColor: isVisible ? color : 'transparent',\n color: isVisible ? '#fff' : tokens.colorNeutralForeground1,\n borderColor: color,\n borderWidth: 1,\n width: '100px',\n padding: '4px 8px',\n textAlign: 'center',\n ...style,\n }}\n >\n <Caption1\n as=\"span\"\n style={{\n display: 'block',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n lineHeight: '1.25',\n }}\n >\n {label}\n </Caption1>\n </Button>\n </Tooltip>\n );\n};\n","import { mergeClasses, tokens } from \"@fluentui/react-components\";\n\nimport { IStackProps } from \"./IStackProps\";\nimport React from \"react\";\nimport { css } from \"@emotion/css\";\n\n/**\n * Mapping of predefined sizes to Fluent UI tokens.\n */\nconst sizeMap: Record<string, string> = {\n xs: tokens.spacingHorizontalXS,\n s: tokens.spacingHorizontalS,\n m: tokens.spacingHorizontalM,\n l: tokens.spacingHorizontalL,\n xl: tokens.spacingHorizontalXL,\n xxl: tokens.spacingHorizontalXXL,\n};\n\n/**\n * Stack component provides a flexible layout using Flexbox.\n * It allows stacking child components either horizontally or vertically with predefined spacing options.\n */\nexport const Stack: React.FC<IStackProps> = React.memo(\n ({\n direction = \"vertical\",\n justifyContent = \"flex-start\",\n alignItems = \"stretch\",\n gap,\n columnGap,\n rowGap,\n margin,\n padding,\n marginTop,\n marginBottom,\n marginLeft,\n marginRight,\n paddingTop,\n paddingBottom,\n paddingLeft,\n paddingRight,\n width,\n height,\n wrap = false,\n children,\n style,\n className,\n overflow,\n background\n }) => {\n const stackStyle = css({\n display: \"flex\",\n flexDirection: direction === \"horizontal\" ? \"row\" : \"column\",\n justifyContent,\n alignItems,\n gap: gap && sizeMap[gap] ? sizeMap[gap] : gap,\n columnGap:\n columnGap && sizeMap[columnGap] ? sizeMap[columnGap] : columnGap,\n rowGap: rowGap && sizeMap[rowGap] ? sizeMap[rowGap] : rowGap,\n margin: margin && sizeMap[margin] ? sizeMap[margin] : margin,\n padding: padding && sizeMap[padding] ? sizeMap[padding] : padding,\n marginTop:\n marginTop && sizeMap[marginTop] ? sizeMap[marginTop] : marginTop,\n marginBottom:\n marginBottom && sizeMap[marginBottom]\n ? sizeMap[marginBottom]\n : marginBottom,\n marginLeft:\n marginLeft && sizeMap[marginLeft] ? sizeMap[marginLeft] : marginLeft,\n marginRight:\n marginRight && sizeMap[marginRight]\n ? sizeMap[marginRight]\n : marginRight,\n paddingTop:\n paddingTop && sizeMap[paddingTop] ? sizeMap[paddingTop] : paddingTop,\n paddingBottom:\n paddingBottom && sizeMap[paddingBottom]\n ? sizeMap[paddingBottom]\n : paddingBottom,\n paddingLeft:\n paddingLeft && sizeMap[paddingLeft]\n ? sizeMap[paddingLeft]\n : paddingLeft,\n paddingRight:\n paddingRight && sizeMap[paddingRight]\n ? sizeMap[paddingRight]\n : paddingRight,\n width,\n height,\n overflow,\n flexWrap: wrap ? \"wrap\" : \"nowrap\",\n backgroundColor: background,\n ...style,\n });\n\n return (\n <div className={mergeClasses(className, stackStyle)}>{children}</div>\n );\n }\n);\n\nStack.displayName = \"Stack\";\n\nexport default Stack;\n","import {\n Menu,\n MenuButton,\n MenuItem,\n MenuList,\n MenuPopover,\n MenuTrigger,\n} from '@fluentui/react-components';\n\nimport { LegendButton } from '../legendeButton/LegendButton';\nimport React from 'react';\nimport Stack from '../stack/Stack';\nimport { css } from '@emotion/css';\n\ninterface LegendContainerProps<T> {\n items: T[];\n visibleLabels: string[];\n toggleLabel: (label: string) => void;\n renderLabel: (item: T) => string;\n getColor: (item: T) => string;\n}\n\nconst styles = {\n wrapper: css({\n display: 'flex',\n flexWrap: 'nowrap',\n overflow: 'hidden',\n justifyContent: 'center',\n gap: 10,\n padding: 2,\n width: '100%',\n boxSizing: 'border-box',\n }),\n};\n\nexport function LegendContainer<T extends { label: string }>(\n props: LegendContainerProps<T> & {\n containerRef: React.RefObject<HTMLDivElement>;\n \n visibleItems: T[];\n overflowItems: T[];\n }\n) {\n const {\n containerRef,\n \n visibleItems,\n overflowItems,\n visibleLabels,\n toggleLabel,\n renderLabel,\n getColor,\n } = props;\n\n return (\n <Stack\n justifyContent=\"center\"\n alignItems=\"center\"\n marginLeft=\"10px\"\n marginRight=\"10px\"\n marginTop=\"25px\"\n marginBottom=\"20px\"\n >\n <div ref={containerRef} className={styles.wrapper}>\n {visibleItems.map(item => {\n const label = item.label;\n const isVisible =\n visibleLabels.length === 0 || visibleLabels.includes(label);\n return (\n \n <LegendButton\n key={label}\n label={renderLabel(item)}\n color={getColor(item)}\n isVisible={isVisible}\n onClick={() => toggleLabel(label)}\n \n />\n \n );\n })}\n\n {overflowItems.length > 0 && (\n <Menu>\n <MenuTrigger disableButtonEnhancement>\n <MenuButton size=\"small\" appearance=\"transparent\">\n +{overflowItems.length}\n </MenuButton>\n </MenuTrigger>\n <MenuPopover style={{ minWidth: 'fit-content', maxWidth: '200px' }}>\n <MenuList>\n {overflowItems.map(item => {\n const label = item.label;\n const isVisible =\n visibleLabels.length === 0 || visibleLabels.includes(label);\n return (\n <MenuItem key={label} style={{ padding: 0 }}>\n \n <LegendButton\n label={renderLabel(item)}\n color={getColor(item)}\n isVisible={isVisible}\n onClick={() => toggleLabel(label)}\n style={{ width: '100px', textAlign: 'left' }}\n />\n \n \n </MenuItem>\n );\n })}\n </MenuList>\n </MenuPopover>\n </Menu>\n )}\n </div>\n </Stack>\n );\n}\n","import { useEffect, useRef, useState } from 'react';\n\nimport { ResizeObserver } from '@juggle/resize-observer';\nimport { useGraphUtils } from './useGraphUtils';\n\nconst BUTTON_WIDTH = 100;\nconst GAP = 10;\n\nexport function useResponsiveLegend<T extends { label: string }>(items: T[]) {\n const containerRef = useRef<HTMLDivElement>(null);\n const [maxVisible, setMaxVisible] = useState(items.length);\n const { debounce } = useGraphUtils();\n useEffect(() => {\n const measure = () => {\n const containerWidth = containerRef.current?.offsetWidth ?? 0;\n const itemTotalWidth = BUTTON_WIDTH + GAP;\n const count = Math.floor(containerWidth / itemTotalWidth);\n setMaxVisible(count);\n };\n\n const debouncedMeasure = debounce(measure, 100); // debounce resize\n\n const observer = new ResizeObserver(debouncedMeasure);\n if (containerRef.current) observer.observe(containerRef.current);\n measure(); // initial\n\n return () => observer.disconnect();\n }, [items]);\n\n return {\n containerRef,\n visibleItems: items.slice(0, maxVisible),\n overflowItems: items.slice(maxVisible),\n };\n}\n","import { LegendContainer } from '../legendContainer/LegendContainer';\nimport React from 'react';\nimport { useResponsiveLegend } from '../../hooks/useResponsiveLegend';\n\nexport interface LegendControlProps {\n data: { label: string }[];\n visibleSeries: string[];\n seriesColors: Record<string, string>;\n toggleSeries: (label: string) => void;\n}\n\nconst RenderLegend: React.FC<LegendControlProps> = ({\n data,\n visibleSeries,\n seriesColors,\n toggleSeries,\n}) => {\n const {\n containerRef,\n \n visibleItems,\n overflowItems,\n } = useResponsiveLegend(data);\n\n return (\n <LegendContainer\n containerRef={containerRef}\n \n visibleItems={visibleItems}\n overflowItems={overflowItems}\n items={data}\n visibleLabels={visibleSeries}\n toggleLabel={toggleSeries}\n renderLabel={d => d.label}\n getColor={d => seriesColors[d.label]}\n />\n );\n};\n\nexport default RenderLegend;\n","import { css } from \"@emotion/css\";\n\nexport const useGraphGlobalStyles = () => {\n return {\n chartWithLegend: css({\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n chartArea: {\n flexGrow: 1,\n minHeight: 0,\n },\n }),\n chartArea: css`\n flex-grow: 1;\n min-height: 0;\n `,\n legendArea: css`\n margin-top: 0px;\n padding-top: 0px;\n \n margin-Left: 10px;\n margin-Right: 10px;\n \n `,\n };\n \n}","import {\n CategoryScale,\n Chart as ChartJS,\n ChartOptions,\n Filler,\n Legend,\n LineElement,\n LinearScale,\n PointElement,\n Title,\n Tooltip,\n} from 'chart.js';\nimport React, { useMemo, useState } from 'react';\nimport { Theme, webLightTheme } from '@fluentui/react-components';\n\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\nimport { Line } from 'react-chartjs-2';\nimport RenderLegend from '../../components/RenderLegend/RenderLegend';\nimport { useGraphGlobalStyles } from '../../graphGlobalStyles/useGraphGlobalStyles';\nimport { useGraphUtils } from '../../hooks/useGraphUtils';\n\nChartJS.register(\n CategoryScale,\n LinearScale,\n PointElement,\n LineElement,\n Tooltip,\n Filler,\n Legend,\n ChartDataLabels,\n Title\n);\n\nexport interface AreaChartProps<T> {\n data: { label: string; data: T[] }[];\n getPrimary: (datum: T) => string | number;\n getSecondary: (datum: T) => number;\n stacked?: boolean;\n title?: string;\n showDatalabels?: boolean;\n theme?: Theme;\n}\n\nexport default function AreaChart<T extends object>({\n data,\n getPrimary,\n getSecondary,\n title,\n showDatalabels = false,\n theme = webLightTheme,\n stacked = false,\n}: AreaChartProps<T>) {\n const [visibleSeries, setVisibleSeries] = useState(() =>\n data.length > 1 ? data.map(s => s.label) : [data[0]?.label]\n );\n\n const styles = useGraphGlobalStyles();\n const { lightenColor, getFluentPalette, createFluentTooltip } = useGraphUtils(\n theme\n );\n\n const seriesColors = useMemo(() => {\n return data.reduce((acc, series, idx) => {\n const base = getFluentPalette(theme)[\n idx % getFluentPalette(theme).length\n ];\n const color = lightenColor(base, 0.3);\n acc[series.label] = color;\n return acc;\n }, {} as Record<string, string>);\n }, [data, theme]);\n\n const toggleSeries = (label: string) => {\n setVisibleSeries(prev => {\n const isVisible = prev.includes(label);\n const next = isVisible ? prev.filter(l => l !== label) : [...prev, label];\n return next.length === 0 && data.length > 0 ? [data[0].label] : next;\n });\n };\n\n const allCategories = useMemo(() => {\n const set = new Set<string | number>();\n data.forEach(series => {\n series.data.forEach(d => set.add(getPrimary(d)));\n });\n return Array.from(set);\n }, [data, getPrimary]);\n\n const chartData = useMemo(() => {\n return {\n labels: allCategories,\n datasets: data\n .filter(series => visibleSeries.includes(series.label))\n .map(series => ({\n label: series.label,\n data: allCategories.map(cat => {\n const match = series.data.find(d => getPrimary(d) === cat);\n return match ? getSecondary(match) : null;\n }),\n borderColor: seriesColors[series.label],\n backgroundColor: seriesColors[series.label],\n fill: true,\n tension: 0.4,\n pointRadius: 2,\n })),\n };\n }, [\n data,\n visibleSeries,\n allCategories,\n getPrimary,\n getSecondary,\n seriesColors,\n ]);\n\nconst { fontFamily, fontSize, labelColor, gridColor } = useMemo(() => ({\n fontFamily: theme.fontFamilyBase,\n fontSize: parseInt(theme.fontSizeBase200.replace('px', '')) || 14,\n labelColor: theme.colorNeutralForeground1,\n gridColor: theme.colorNeutralStroke2,\n}), [theme]);\n\n const options: ChartOptions<'line'> = useMemo(() => ({\n responsive: true,\n maintainAspectRatio: false,\n plugins: {\n title: {\n display: !!title,\n text: title ,\n font: {\n size: 14,\n family: theme.fontFamilyBase,\n weight: theme.fontWeightSemibold,\n },\n color: theme.colorNeutralForeground1,\n padding: {\n top: 20,\n bottom: 20,\n },\n },\n datalabels: {\n display: showDatalabels,\n color: theme.colorNeutralForeground1,\n font: {\n family: theme.fontFamilyBase,\n size: parseInt(theme.fontSizeBase200.replace('px', '')) || 14,\n },\n },\n legend: { display: false },\n tooltip: createFluentTooltip<'line'>(theme),\n },\n scales: {\n x: {\n stacked,\n ticks: {\n color: labelColor,\n font: { family: fontFamily, size: fontSize },\n },\n grid: { color: gridColor },\n },\n y: {\n stacked,\n ticks: {\n color: labelColor,\n font: { family: fontFamily, size: fontSize },\n },\n grid: { color: gridColor },\n },\n },\n }), [\n title,\n showDatalabels,\n theme,\n fontFamily,\n fontSize,\n labelColor,\n gridColor,\n stacked,\n createFluentTooltip,\n ]);\n\n return (\n <div className={styles.chartWithLegend}>\n <div className={styles.chartArea}>\n <Line data={chartData} options={options} />\n </div>\n <RenderLegend\n data={data}\n visibleSeries={visibleSeries}\n seriesColors={seriesColors}\n toggleSeries={toggleSeries}\n />\n </div>\n );\n}\n","import {\n BarElement,\n CategoryScale,\n Chart as ChartJS,\n ChartOptions,\n Legend,\n LinearScale,\n Title,\n Tooltip,\n} from 'chart.js';\nimport React, { useMemo, useState } from 'react';\n\nimport { Bar } from 'react-chartjs-2';\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\nimport RenderLegend from '../../components/RenderLegend/RenderLegend';\nimport { Theme } from '@fluentui/react-theme';\nimport { useGraphGlobalStyles } from '../../graphGlobalStyles/useGraphGlobalStyles';\nimport { useGraphUtils } from '../../hooks/useGraphUtils';\n\nChartJS.register(\n CategoryScale,\n LinearScale,\n BarElement,\n Tooltip,\n Legend,\n Title,\n ChartDataLabels,\n \n \n);\n\n\n\nexport interface BarHorizontalProps<T> {\n data: { label: string; data: T[] }[];\n getPrimary: (datum: T) => string | number;\n getSecondary: (datum: T) => number;\n stacked?: boolean;\n title?: string;\n showDatalabels?: boolean;\n theme: Theme;\n}\n\nexport default function BarHorizontalChart<T extends object>({\n data,\n getPrimary,\n getSecondary,\n stacked = false,\n showDatalabels = false,\n title,\n theme\n}: BarHorizontalProps<T>) {\n const [visibleSeries, setVisibleSeries] = useState(() =>\n data.length > 1 ? data.map(s => s.label) : [data[0]?.label]\n );\nconst styles = useGraphGlobalStyles();\n \n const { lightenColor, getFluentPalette , createFluentTooltip} = useGraphUtils(theme);\n\n const seriesColors = useMemo(() => {\n return data.reduce((acc, series, idx) => {\n const base = getFluentPalette(theme)[\n idx % getFluentPalette(theme).length\n ];\n const color = lightenColor(base, 0.3);\n acc[series.label] = color;\n return acc;\n }, {} as Record<string, string>);\n }, [data]);\n\n const toggleSeries = (label: string) => {\n setVisibleSeries(prev => {\n const isVisible = prev.includes(label);\n const next = isVisible ? prev.filter(l => l !== label) : [...prev, label];\n return next.length === 0 && data.length > 0 ? [data[0].label] : next;\n });\n };\n\n const allCategories = useMemo(() => {\n const categorySet = new Set<string | number>();\n data.forEach(series => {\n series.data.forEach(datum => {\n categorySet.add(getPrimary(datum));\n });\n });\n return Array.from(categorySet);\n }, [data, getPrimary]);\n\n const chartData = useMemo(() => {\n return {\n labels: allCategories,\n datasets: data\n .filter(series => visibleSeries.includes(series.label))\n .map(series => ({\n label: series.label,\n backgroundColor: seriesColors[series.label],\n data: allCategories.map(cat => {\n const found = series.data.find(d => getPrimary(d) === cat);\n return found ? getSecondary(found) : 0;\n }),\n })),\n };\n }, [data, visibleSeries, allCategories, seriesColors]);\n\n const { fontFamily, fontSize, labelColor, gridColor } = useMemo(() => ({\n fontFamily: theme.fontFamilyBase,\n fontSize: parseInt(theme.fontSizeBase200.replace('px', '')) || 14,\n labelColor: theme.colorNeutralForeground1,\n gridColor: theme.colorNeutralStroke2,\n }), [theme]);\n\n const options: ChartOptions<'bar'> = useMemo(() => ({\n indexAxis: 'y',\n responsive: true,\n maintainAspectRatio: false,\n plugins: {\n title: {\n display: !!title,\n text: title,\n font: {\n size: 14,\n family: theme.fontFamilyBase,\n weight: theme.fontWeightSemibold,\n },\n color: theme.colorNeutralForeground1,\n padding: {\n top: 20,\n bottom: 20,\n },\n },\n datalabels: {\n display: showDatalabels,\n color: theme.colorNeutralForeground1,\n font: {\n family: theme.fontFamilyBase,\n size: parseInt(theme.fontSizeBase200.replace('px', '')) || 14,\n },\n },\n legend: {\n display: false,\n },\n tooltip: createFluentTooltip<'bar'>(theme),\n },\n scales: {\n x: {\n stacked,\n ticks: {\n color: labelColor,\n font: {\n family: fontFamily,\n size: fontSize,\n },\n },\n grid: {\n color: gridColor,\n },\n },\n y: {\n stacked,\n ticks: {\n color: labelColor,\n font: {\n family: fontFamily,\n size: fontSize,\n },\n },\n grid: {\n color: gridColor,\n },\n },\n },\n }), [\n title,\n showDatalabels,\n theme,\n fontFamily,\n fontSize,\n labelColor,\n gridColor,\n stacked,\n createFluentTooltip,\n ]);\n\n return (\n <div className={styles.chartWithLegend}>\n <div className={styles.chartArea}>\n <Bar data={chartData} options={options} />\n </div>\n <div className={styles.legendArea} >\n <RenderLegend\n data={data}\n visibleSeries={visibleSeries}\n seriesColors={seriesColors}\n toggleSeries={toggleSeries}\n />\n </div>\n </div>\n \n );\n}\n","import {\n BubbleDataPoint,\n CategoryScale,\n Chart as ChartJS,\n ChartOptions,\n Legend,\n LinearScale,\n PointElement,\n Title,\n Tooltip,\n} from 'chart.js';\nimport React, { useMemo, useState } from 'react';\nimport { Theme, webLightTheme } from '@fluentui/react-components';\n\nimport { Bubble } from 'react-chartjs-2';\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\nimport RenderLegend from '../../components/RenderLegend/RenderLegend';\nimport { useGraphGlobalStyles } from '../../graphGlobalStyles/useGraphGlobalStyles';\nimport { useGraphUtils } from '../../hooks/useGraphUtils';\n\nChartJS.register(\n CategoryScale,\n LinearScale,\n PointElement,\n Tooltip,\n Legend,\n ChartDataLabels,\n Title\n);\n\nexport interface BubbleChartProps<T> {\n data: { label: string; data: T[] }[];\n getPrimary: (datum: T) => string | number | Date;\n getSecondary: (datum: T) => number;\n getRadius: (datum: T) => number;\n title?: string;\n showDataLabels?: boolean;\n theme?: Theme;\n}\n\nexport default function BubbleChart<T extends object>({\n data,\n getPrimary,\n getSecondary,\n getRadius,\n showDataLabels,\n title,\n theme = webLightTheme,\n}: BubbleChartProps<T>) {\n const [visibleSeries, setVisibleSeries] = useState(() =>\n data.length > 1 ? data.map(s => s.label) : [data[0]?.label]\n );\n\n const { lightenColor, getFluentPalette, createFluentTooltip } = useGraphUtils(\n theme\n );\n\n const styles = useGraphGlobalStyles();\n const seriesColors = useMemo(() => {\n return data.reduce((acc, series, idx) => {\n const base = getFluentPalette(theme)[\n idx % getFluentPalette(theme).length\n ];\n const color = lightenColor(base, 0.3);\n acc[series.label] = color;\n return acc;\n }, {} as Record<string, string>);\n }, [data, theme]);\n\n const toggleSeries = (label: string) => {\n setVisibleSeries(prev => {\n const isVisible = prev.includes(label);\n const next = isVisible ? prev.filter(l => l !== label) : [...prev, label];\n return next.length === 0 && data.length > 0 ? [data[0].label] : next;\n });\n };\n\n const chartData = useMemo(() => {\n return {\n datasets: data\n .filter(series => visibleSeries.includes(series.label))\n .map(series => ({\n label: series.label,\n data: series.data.map(d => ({\n x: getPrimary(d),\n y: getSecondary(d),\n r: getRadius(d),\n })) as BubbleDataPoint[],\n backgroundColor: seriesColors[series.label],\n borderColor: theme.colorNeutralStroke1,\n borderWidth: 1,\n hoverBorderWidth: 2,\n })),\n };\n }, [data, visibleSeries, getPrimary, getSecondary, getRadius, seriesColors]);\n\n const { fontFamily, fontSize, labelColor, gridColor } = useMemo(() => ({\n fontFamily: theme.fontFamilyBase,\n fontSize: parseInt(theme.fontSizeBase200.replace('px', '')) || 14,\n labelColor: theme.colorNeutralForeground1,\n gridColor: theme.colorNeutralStroke2,\n }), [theme]);\n\n const options: ChartOptions<'bubble'> = useMemo(() => ({\n responsive: true,\n maintainAspectRatio: false,\n plugins: {\n title: {\n display: !!title,\n text: title,\n font: {\n size: 14,\n family: theme.fontFamilyBase,\n weight: theme.fontWeightSemibold,\n },\n color: theme.colorNeutralForeground1,\n padding: {\n top: 20,\n bottom: 20,\n },\n },\n datalabels: {\n display: showDataLabels,\n color: theme.colorNeutralForeground1,\n font: {\n family: theme.fontFamilyBase,\n size: parseInt(theme.fontSizeBase200.replace('px', '')) || 14,\n },\n },\n legend: { display: false },\n tooltip: createFluentTooltip<'bubble'>(theme),\n },\n scales: {\n x: {\n type:\n typeof getPrimary(data[0]?.data[0]) === 'number'\n ? 'linear'\n : 'category',\n ticks: {\n color: labelColor,\n font: { family: fontFamily, size: fontSize },\n },\n grid: { color: gridColor },\n },\n y: {\n ticks: {\n color: labelColor,\n font: { family: fontFamily, size: fontSize },\n },\n grid: { color: gridColor },\n },\n },\n }), [\n title,\n showDataLabels,\n theme,\n getPrimary,\n getSecondary,\n data,\n fontFamily,\n fontSize,\n labelColor,\n gridColor,\n createFluentTooltip,\n ]);\n\n return (\n <>\n <div className={styles.chartWithLegend}>\n <div className={styles.chartArea}>\n <Bubble data={chartData} options={options} />\n </div>\n <div className={styles.legendArea}>\n <RenderLegend\n data={data}\n visibleSeries={visibleSeries}\n seriesColors={seriesColors}\n toggleSeries={toggleSeries}\n />\n </div>\n </div>\n </>\n );\n}\n","import {\n BarElement,\n CategoryScale,\n Chart as ChartJS,\n ChartOptions,\n Legend,\n LineElement,\n LinearScale,\n PointElement,\n Title,\n Tooltip,\n} from 'chart.js';\nimport React, { useMemo, useState } from 'react';\nimport { Theme, webLightTheme } from '@fluentui/react-components';\n\nimport { Chart } from 'react-chartjs-2';\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\nimport RenderLegend from '../../components/RenderLegend/RenderLegend';\nimport { useGraphGlobalStyles } from '../../graphGlobalStyles/useGraphGlobalStyles';\nimport { useGraphUtils } from '../../hooks/useGraphUtils';\n\nChartJS.register(ChartDataLabels);\nChartJS.register(\n CategoryScale,\n LinearScale,\n BarElement,\n LineElement,\n PointElement,\n Tooltip,\n Legend,\n Title\n);\n\nexport interface ComboChartProps<T> {\n data: {\n label: string;\n type: 'bar' | 'line';\n data: T[];\n yAxisID?: string;\n }[];\n getPrimary: (datum: T) => string | number;\n getSecondary: (datum: T) => number;\n title?: string;\n showDataLabels?: boolean;\n theme?: Theme;\n}\n\nexport default function ComboChart<T extends object>({\n data,\n getPrimary,\n getSecondary,\n title,\n showDataLabels = false,\n theme = webLightTheme,\n}: ComboChartProps<T>) {\n const [visibleSeries, setVisibleSeries] = useState(() =>\n data.map(s => s.label)\n );\n\n const styles = useGraphGlobalStyles();\n const { lightenColor, getFluentPalette, createFluentTooltip } = useGraphUtils(theme);\n\n const seriesColors = useMemo(() => {\n return data.reduce((acc, series, idx) => {\n const base = getFluentPalette(theme)[\n idx % getFluentPalette(theme).length\n ];\n acc[series.label] = lightenColor(base, 0.3);\n return acc;\n }, {} as Record<string, string>);\n }, [data, theme]);\n\n const toggleSeries = (label: string) => {\n setVisibleSeries(prev => {\n const isVisible = prev.includes(label);\n const next = isVisible ? prev.filter(l => l !== label) : [...prev, label];\n return next.length === 0 ? [data[0].label] : next;\n });\n };\n\n const allCategories = useMemo(() => {\n const set = new Set<string | number>();\n data.forEach(series => series.data.forEach(d => set.add(getPrimary(d))));\n return Array.from(set);\n }, [data, getPrimary]);\n\n const chartData = useMemo(() => {\n const sortedSeries = data\n .filter(series => visibleSeries.includes(series.label))\n .sort((a, b) => {\n // Ensure bars come before lines\n if (a.type === 'bar' && b.type === 'line') return -1;\n if (a.type === 'line' && b.type === 'bar') return 1;\n return 0;\n });\n\n return {\n labels: allCategories,\n datasets: sortedSeries.map(series => ({\n type: series.type,\n label: series.label,\n yAxisID: series.yAxisID ?? 'y',\n data: allCategories.map(cat => {\n const found = series.data.find(d => getPrimary(d) === cat);\n return found ? getSecondary(found) : 0;\n }),\n backgroundColor: seriesColors[series.label],\n borderColor: seriesColors[series.label],\n fill: series.type === 'bar',\n tension: series.type === 'line' ? 0.4 : 0,\n pointRadius: series.type === 'line' ? 3 : 0,\n borderWidth: series.type === 'line' ? 2 : 1,\n order: series.type === 'bar' ? 1 : 0, // Ensure bars are drawn first\n })),\n };\n }, [\n data,\n visibleSeries,\n allCategories,\n getPrimary,\n getSecondary,\n seriesColors,\n ]);\n\n const { fontFamily, fontSize, labelColor, gridColor } = useMemo(() => ({\n fontFamily: theme.fontFamilyBase,\n fontSize: parseInt(theme.fontSizeBase200.replace('px', '')) || 14,\n labelColor: theme.colorNeutralForeground1,\n gridColor: theme.colorNeutralStroke2,\n }), [theme]);\n\n \n\n const options: ChartOptions<'bar' | 'line'> = useMemo(() => ( {\n responsive: true,\n maintainAspectRatio: false,\n plugins: {\n title: {\n display: !!title,\n text: title,\n font: {\n size: 14,\n family: theme.fontFamilyBase,\n weight: theme.fontWeightSemibold,\n },\n color: theme.colorNeutralForeground1,\n padding: {\n top: 20,\n bottom: 20,\n },\n },\n datalabels: {\n display: showDataLabels,\n color: theme.colorNeutralForeground1,\n font: {\n family: theme.fontFamilyBase,\n size: parseInt(theme.fontSizeBase200.replace('px', '')) || 14,\n },\n },\n legend: { display: false },\n tooltip: createFluentTooltip<'bar' | 'line'>(theme),\n },\n scales: {\n x: {\n ticks: {\n color: labelColor,\n font: { family: fontFamily, size: fontSize },\n },\n grid: { color: gridColor },\n },\n y: {\n position: 'left',\n ticks: {\n color: labelColor,\n font: { family: fontFamily, size: fontSize },\n },\n grid: { color: gridColor },\n stacked: false,\n },\n },\n }), [\n title,\n showDataLabels,\n theme,\n fontFamily,\n fontSize,\n labelColor,\n gridColor,\n createFluentTooltip,\n ]);\n\n return (\n <>\n <div className={styles.chartWithLegend}>\n <div className={styles.chartArea}>\n <Chart type=\"bar\" data={chartData} options={options} />\n </div>\n <div className={styles.legendArea}>\n <RenderLegend\n data={data}\n visibleSeries={visibleSeries}\n seriesColors={seriesColors}\n toggleSeries={toggleSeries}\n />\n </div>\n </div>\n </>\n );\n}\n","import { LegendContainer } from '../legendContainer/LegendContainer';\nimport React from 'react';\nimport { useResponsiveLegend } from '../../hooks/useResponsiveLegend';\n\nexport interface LegendEntry {\n label: string;\n value: number;\n color: string;\n}\n\nexport interface ValueLegendProps {\n entries: LegendEntry[];\n visibleLabels: string[];\n toggleLabel: (label: string) => void;\n}\n\nconst RenderValueLegend: React.FC<ValueLegendProps> = ({\n entries,\n visibleLabels,\n toggleLabel,\n}) => {\n const {\n containerRef,\n\n visibleItems,\n overflowItems,\n } = useResponsiveLegend(entries);\n\n return (\n <LegendContainer\n containerRef={containerRef}\n visibleItems={visibleItems}\n overflowItems={overflowItems}\n items={entries}\n visibleLabels={visibleLabels}\n toggleLabel={toggleLabel}\n renderLabel={entry => `${entry.label}: ${entry.value}`}\n getColor={entry => entry.color}\n />\n );\n};\n\nexport default RenderValueLegend;\n","import {\n ArcElement,\n Chart as ChartJS,\n ChartOptions,\n Legend,\n Title,\n Tooltip,\n} from 'chart.js';\nimport React, { useMemo, useState } from 'react';\nimport { Theme, webLightTheme } from '@fluentui/react-components';\n\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\nimport { Doughnut } from 'react-chartjs-2';\nimport RenderValueLegend from '../../components/renderValueLegend/RenderValueLegend';\nimport { useGraphGlobalStyles } from '../../graphGlobalStyles/useGraphGlobalStyles';\nimport { useGraphUtils } from '../../hooks/useGraphUtils';\n\nChartJS.register(ChartDataLabels);\nChartJS.register(ArcElement, Tooltip, Legend, Title);\n\nexport interface DoughnutChartProps<T> {\n data: {\n label: string;\n data: T[];\n }[];\n getLabel: (datum: T) => string;\n getValue: (datum: T) => number;\n title?: string;\n showDataLabels?: boolean;\n theme?: Theme;\n}\n\nexport default function DoughnutChart<T extends object>({\n data,\n getLabel,\n getValue,\n title,\n showDataLabels = true,\n theme = webLightTheme,\n}: DoughnutChartProps<T>) {\n const styles = useGraphGlobalStyles();\n const { lightenColor, getFluentPalette, createFluentTooltip } = useGraphUtils(\n theme\n );\n const [hiddenLabels, setHiddenLabels] = useState<string[]>([]);\n\n const toggleLabel = (label: string): void => {\n setHiddenLabels(prev =>\n prev.includes(label) ? prev.filter(l => l !== label) : [...prev, label]\n );\n };\n\n const valueMap = useMemo(() => {\n const map = new Map<string, number>();\n data.forEach(series => {\n series.data.forEach(d => {\n const label = getLabel(d);\n const value = getValue(d);\n map.set(label, (map.get(label) || 0) + value);\n });\n });\n return map;\n }, [data, getLabel, getValue]);\n\n const { allLabels, colors } = useMemo(() => {\n const allLabels = Array.from(valueMap.keys());\n const palette = getFluentPalette(theme);\n const colors = allLabels.map((_, i) =>\n lightenColor(palette[i % palette.length], 0.3)\n );\n return { allLabels, colors };\n }, [valueMap, getFluentPalette, theme, lightenColor]);\n\n const { filteredLabels, values, visibleColors } = useMemo(() => {\n const filteredLabels = allLabels.filter(label => !hiddenLabels.includes(label));\n const values = filteredLabels.map(label => valueMap.get(label) || 0);\n const visibleColors = filteredLabels.map(label => {\n const idx = allLabels.indexOf(label);\n return colors[idx];\n });\n return { filteredLabels, values, visibleColors };\n }, [allLabels, hiddenLabels, valueMap, colors]);\n\n const chartData = useMemo(() => ({\n labels: filteredLabels,\n datasets: [\n {\n data: values,\n backgroundColor: visibleColors,\n borderWidth: 1,\n },\n ],\n }), [filteredLabels, values, visibleColors]);\n\n const legendEntries = useMemo(() => {\n return allLabels.map((label, idx) => ({\n label,\n value: valueMap.get(label) || 0,\n color: colors[idx],\n }));\n }, [allLabels, valueMap, colors]);\n\n const options: ChartOptions<'doughnut'> = useMemo(\n () => ({\n responsive: true,\n maintainAspectRatio: false,\n plugins: {\n legend: { display: false },\n tooltip: createFluentTooltip<'doughnut'>(theme),\n title: {\n display: !!title,\n text: title,\n font: {\n size: 14,\n family: theme.fontFamilyBase,\n weight: theme.fontWeightSemibold,\n },\n color: theme.colorNeutralForeground1,\n padding: {\n top: 20,\n bottom: 20,\n },\n },\n datalabels: {\n display: showDataLabels,\n color: theme.colorNeutralForeground1,\n font: {\n family: theme.fontFamilyBase,\n size: parseInt(theme.fontSizeBase200.replace('px', '')) || 14,\n },\n formatter: (value: number) => value,\n },\n },\n }),\n [title, theme, showDataLabels, createFluentTooltip]\n );\n\n return (\n <div className={styles.chartWithLegend}>\n <div className={styles.chartArea}>\n <Doughnut data={chartData} options={options} />\n </div>\n <div className={styles.legendArea}>\n <RenderValueLegend\n entries={legendEntries}\n visibleLabels={filteredLabels}\n toggleLabel={toggleLabel}\n />\n </div>\n </div>\n );\n}\n","import {\n BarElement,\n CategoryScale,\n Chart as ChartJS,\n ChartOptions,\n Legend,\n LinearScale,\n Title,\n Tooltip,\n} from 'chart.js';\nimport React, { useMemo, useState } from 'react';\nimport { Theme, webLightTheme } from '@fluentui/react-components';\n\nimport { Bar } from 'react-chartjs-2';\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\nimport RenderLegend from '../../components/RenderLegend/RenderLegend';\nimport { useGraphGlobalStyles } from '../../graphGlobalStyles/useGraphGlobalStyles';\nimport { useGraphUtils } from '../../hooks/useGraphUtils';\n\nChartJS.register(ChartDataLabels);\nChartJS.register(\n CategoryScale,\n LinearScale,\n BarElement,\n Tooltip,\n Legend,\n Title\n);\n\nexport interface FloatingBarChartProps<T> {\n data: { label: string; data: T[] }[];\n getPrimary: (datum: T) => string | number;\n getRange: (datum: T) => [number, number]; // e.g., [min, max]\n title?: string;\n showDataLabels?: boolean;\n theme?: Theme;\n}\n\nexport default function FloatingBarChart<T extends object>({\n data,\n getPrimary,\n getRange,\n title,\n showDataLabels = false,\n theme = webLightTheme,\n}: FloatingBarChartProps<T>) {\n const [visibleSeries, setVisibleSeries] = useState(() =>\n data.length > 1 ? data.map(s => s.label) : [data[0]?.label]\n );\n\n const styles = useGraphGlobalStyles();\n const { lightenColor, getFluentPalette, createFluentTooltip } = useGraphUtils(\n theme\n );\n\n const seriesColors = useMemo(() => {\n return data.reduce((acc, series, idx) => {\n const base = getFluentPalette(theme)[\n idx % getFluentPalette(theme).length\n ];\n const color = lightenColor(base, 0.3);\n acc[series.label] = color;\n return acc;\n }, {} as Record<string, string>);\n }, [data, theme]);\n\n const toggleSeries = (label: string) => {\n setVisibleSeries(prev => {\n const isVisible = prev.includes(label);\n const next = isVisible ? prev.filter(l => l !== label) : [...prev, label];\n return next.length === 0 && data.length > 0 ? [data[0].label] : next;\n });\n };\n\n const allCategories = useMemo(() => {\n const set = new Set<string | number>();\n data.forEach(series => {\n series.data.forEach(d => set.add(getPrimary(d)));\n });\n return Array.from(set);\n }, [data, getPrimary]);\n\n const chartData = useMemo(() => {\n return {\n labels: allCategories,\n datasets: data\n .filter(series => visibleSeries.includes(series.label))\n .map(series => ({\n label: series.label,\n data: allCategories.map(cat => {\n const match = series.data.find(d => getPrimary(d) === cat);\n return match ? getRange(match) : [0, 0];\n }),\n backgroundColor: seriesColors[series.label],\n borderRadius: 2,\n })),\n };\n }, [data, visibleSeries, allCategories, getPrimary, getRange, seriesColors]);\n\nconst { fontFamily, fontSize, labelColor, gridColor } = useMemo(() => ({\n fontFamily: theme.fontFamilyBase,\n fontSize: parseInt(theme.fontSizeBase200.replace('px', '')) || 14,\n labelColor: theme.colorNeutralForeground1,\n gridColor: theme.colorNeutralStroke2,\n}), [theme]);\n\nconst options: ChartOptions<'bar'> = useMemo(() => ({\n responsive: true,\n maintainAspectRatio: false,\n plugins: {\n title: {\n display: !!title,\n text: title,\n font: {\n size: 14,\n family: theme.fontFamilyBase,\n weight: theme.fontWeightSemibold,\n },\n color: theme.colorNeutralForeground1,\n padding: {\n top: 20,\n bottom: 20,\n },\n },\n datalabels: {\n display: showDataLabels,\n color: theme.colorNeutralForeground1,\n font: {\n family: theme.fontFamilyBase,\n size: parseInt(theme.fontSizeBase200.replace('px', '')) || 14,\n },\n },\n legend: { display: false },\n tooltip: createFluentTooltip<'bar'>(theme),\n },\n scales: {\n x: {\n ticks: {\n color: labelColor,\n font: { family: fontFamily, size: fontSize },\n },\n grid: { color: gridColor },\n },\n y: {\n ticks: {\n color: labelColor,\n font: { family: fontFamily, size: fontSize },\n },\n grid: { color: gridColor },\n },\n },\n}), [\n title,\n theme,\n showDataLabels,\n labelColor,\n fontFamily,\n fontSize,\n gridColor,\n createFluentTooltip\n]);\n\n return (\n <div className={styles.chartWithLegend}>\n <div className={styles.chartArea}>\n <Bar data={chartData} options={options} />\n </div>\n <div className={styles.legendArea}>\n <RenderLegend\n data={data}\n visibleSeries={visibleSeries}\n seriesColors={seriesColors}\n toggleSeries={toggleSeries}\n />\n </div>\n </div>\n );\n}\n","import {\n CategoryScale,\n Chart as ChartJS,\n ChartOptions,\n Legend,\n LineElement,\n LinearScale,\n PointElement,\n Title,\n Tooltip,\n} from 'chart.js';\nimport React, { useMemo, useState } from 'react';\nimport { Theme, webLightTheme } from '@fluentui/react-components';\n\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\nimport { Line } from 'react-chartjs-2';\nimport RenderLegend from '../../components/RenderLegend/RenderLegend';\nimport { useGraphGlobalStyles } from '../../graphGlobalStyles/useGraphGlobalStyles';\nimport { useGraphUtils } from '../../hooks/useGraphUtils';\n\nChartJS.register(ChartDataLabels);\nChartJS.register(\n LineElement,\n PointElement,\n CategoryScale,\n LinearScale,\n Tooltip,\n Legend,\n Title\n);\n\nexport interface LineChartProps<T> {\n data: { label: string; data: T[] }[];\n getPrimary: (datum: T) => string | number;\n getSecondary: (datum: T) => number;\n title?: string;\n showDataLabels?: boolean;\n theme?: Theme;\n}\n\nexport default function LineChart<T extends object>({\n data,\n getPrimary,\n getSecondary,\n title,\n showDataLabels = false,\n theme = webLightTheme,\n}: LineChartProps<T>) {\n const [visibleSeries, setVisibleSeries] = useState(() =>\n data.length > 1 ? data.map(s => s.label) : [data[0]?.label]\n );\n\n const styles = useGraphGlobalStyles();\n const { lightenColor, getFluentPalette , createFluentTooltip} = useGraphUtils(theme);\n\n const seriesColors = useMemo(() => {\n return data.reduce((acc, series, idx) => {\n const base = getFluentPalette(theme)[\n idx % getFluentPalette(theme).length\n ];\n const color = lightenColor(base, 0.3);\n acc[series.label] = color;\n return acc;\n }, {} as Record<string, string>);\n }, [data, theme]);\n\n const toggleSeries = (label: string) => {\n setVisibleSeries(prev => {\n const isVisible = prev.includes(label);\n const next = isVisible ? prev.filter(l => l !== label) : [...prev, label];\n return next.length === 0 && data.length > 0 ? [data[0].label] : next;\n });\n };\n\n const allCategories = useMemo(() => {\n const set = new Set<string | number>();\n data.forEach(series => {\n series.data.forEach(d => set.add(getPrimary(d)));\n });\n return Array.from(set);\n }, [data, getPrimary]);\n\n const chartData = useMemo(() => {\n return {\n labels: allCategories,\n datasets: data\n .filter(series => visibleSeries.includes(series.label))\n .map(series => ({\n label: series.label,\n data: allCategories.map(cat => {\n const match = series.data.find(d => getPrimary(d) === cat);\n return match ? getSecondary(match) : null;\n }),\n borderColor: seriesColors[series.label],\n backgroundColor: seriesColors[series.label],\n tension: 0.4,\n fill: false,\n pointRadius: 4,\n })),\n };\n }, [\n data,\n visibleSeries,\n allCategories,\n getPrimary,\n getSecondary,\n seriesColors,\n ]);\n\n const { fontFamily, fontSize, labelColor, gridColor } = useMemo(() => ({\n fontFamily: theme.fontFamilyBase,\n fontSize: parseInt(theme.fontSizeBase200.replace('px', '')) || 14,\n labelColor: theme.colorNeutralForeground1,\n gridColor: theme.colorNeutralStroke2,\n }), [theme]);\n\n const options: ChartOptions<'line'> = useMemo(() => ({\n responsive: true,\n maintainAspectRatio: false,\n plugins: {\n title: {\n display: !!title,\n text: title,\n font: {\n size: 14,\n family: theme.fontFamilyBase,\n weight: theme.fontWeightSemibold,\n },\n color: theme.colorNeutralForeground1,\n padding: {\n top: 20,\n bottom: 20,\n },\n },\n datalabels: {\n display: showDataLabels,\n color: theme.colorNeutralForeground1,\n font: {\n family: theme.fontFamilyBase,\n size: parseInt(theme.fontSizeBase200.replace('px', '')) || 14,\n },\n },\n legend: { display: false },\n tooltip: createFluentTooltip<'line'>(theme),\n },\n scales: {\n x: {\n ticks: {\n color: labelColor,\n font: {\n family: fontFamily,\n size: fontSize,\n },\n },\n grid: {\n color: gridColor,\n },\n },\n y: {\n ticks: {\n color: labelColor,\n font: {\n family: fontFamily,\n size: fontSize,\n },\n },\n grid: {\n color: gridColor,\n },\n },\n },\n }), [\n title,\n theme,\n showDataLabels,\n labelColor,\n fontFamily,\n fontSize,\n gridColor,\n createFluentTooltip\n ]);\n\n return (\n\n <div className={styles.chartWithLegend}>\n <div className={styles.chartArea}>\n <Line data={chartData} options={options} />\n </div>\n <div className={styles.legendArea} >\n <RenderLegend\n data={data}\n visibleSeries={visibleSeries}\n seriesColors={seriesColors}\n toggleSeries={toggleSeries}\n />\n </div>\n </div>\n \n );\n}\n","import {\n ArcElement,\n Chart as ChartJS,\n ChartOptions,\n Legend,\n Title,\n Tooltip,\n} from 'chart.js';\nimport React, { useMemo, useState } from 'react';\nimport { Theme, webLightTheme } from '@fluentui/react-components';\n\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\nimport { Pie } from 'react-chartjs-2';\nimport RenderValueLegend from '../../components/renderValueLegend/RenderValueLegend';\nimport { createFluentTooltip } from '../../hooks/useGraphUtils';\nimport { useGraphGlobalStyles } from '../../graphGlobalStyles/useGraphGlobalStyles';\nimport { useGraphUtils } from '../../hooks/useGraphUtils';\n\nChartJS.register(ChartDataLabels);\nChartJS.register(ArcElement, Tooltip, Legend, Title);\n\nexport interface PieChartProps<T> {\n data: {\n label: string;\n data: T[];\n }[];\n getLabel: (datum: T) => string;\n getValue: (datum: T) => number;\n title?: string;\n showDataLabels?: boolean;\n theme?: Theme;\n}\n\nexport default function PieChart<T extends object>({\n data,\n getLabel,\n getValue,\n title,\n showDataLabels = false,\n theme = webLightTheme,\n}: PieChartProps<T>) {\n const { getFluentPalette, lightenColor } = useGraphUtils(theme);\n const [hiddenLabels, setHiddenLabels] = useState<string[]>([]);\n const styles = useGraphGlobalStyles();\n const toggleLabel = (label: string): void => {\n setHiddenLabels(prev =>\n prev.includes(label) ? prev.filter(l => l !== label) : [...prev, label]\n );\n };\n\n const valueMap = useMemo(() => {\n const map = new Map<string, number>();\n data.forEach(series => {\n series.data.forEach(d => {\n const label = getLabel(d);\n const value = getValue(d);\n map.set(label, (map.get(label) || 0) + value);\n });\n });\n return map;\n }, [data, getLabel, getValue]);\n\nconst { allLabels, colors, filteredLabels, values, visibleColors } = useMemo(() => {\n const allLabels = Array.from(valueMap.keys());\n const palette = getFluentPalette(theme);\n const colors = allLabels.map((_, i) =>\n lightenColor(palette[i % palette.length], 0.3)\n );\n\n const filteredLabels = allLabels.filter(\n label => !hiddenLabels.includes(label)\n );\n const values = filteredLabels.map(label => valueMap.get(label) || 0);\n const visibleColors = filteredLabels.map(label => {\n const idx = allLabels.indexOf(label);\n return colors[idx];\n });\n\n return { allLabels, colors, filteredLabels, values, visibleColors };\n}, [valueMap, getFluentPalette, lightenColor, theme, hiddenLabels]);\n\nconst { chartData, legendEntries } = useMemo(() => {\n const chartData = {\n labels: filteredLabels,\n datasets: [\n {\n data: values,\n backgroundColor: visibleColors,\n borderWidth: 1,\n },\n ],\n };\n\n const legendEntries = allLabels.map((label, i) => ({\n label,\n value: valueMap.get(label) || 0,\n color: colors[i],\n }));\n\n return { chartData, legendEntries };\n}, [filteredLabels, values, visibleColors, allLabels, valueMap, colors]);\n\nconst options = useMemo<ChartOptions<'pie'>>(() => ({\n responsive: true,\n maintainAspectRatio: false,\n plugins: {\n tooltip: createFluentTooltip<'pie'>(theme),\n legend: { display: false },\n title: {\n display: !!title,\n text: title,\n font: {\n size: 14,\n family: theme.fontFamilyBase,\n weight: theme.fontWeightSemibold,\n },\n color: theme.colorNeutralForeground1,\n padding: {\n top: 20,\n bottom: 20,\n },\n },\n datalabels: {\n display: showDataLabels,\n color: theme.colorNeutralForeground1,\n font: {\n family: theme.fontFamilyBase,\n size: parseInt(theme.fontSizeBase200.replace('px', '')) || 14,\n },\n },\n },\n}), [theme, title, showDataLabels]);\n\n return (\n <div className={styles.chartWithLegend}>\n <div className={styles.chartArea}>\n <Pie data={chartData} options={options} />\n </div>\n <div className={styles.legendArea}>\n <RenderValueLegend\n entries={legendEntries}\n visibleLabels={filteredLabels}\n toggleLabel={toggleLabel}\n />\n </div>\n </div>\n );\n}\n","import { LegendContainer } from '../legendContainer/LegendContainer';\nimport React from 'react';\nimport { useResponsiveLegend } from '../../hooks/useResponsiveLegend';\n\nexport interface SliceLegendProps {\n labels: string[];\n colors: string[];\n visibleLabels: string[];\n toggleLabel: (label: string) => void;\n}\n\nconst RenderSliceLegend: React.FC<SliceLegendProps> = ({\n labels,\n colors,\n visibleLabels,\n toggleLabel,\n}) => {\n interface SliceLegendItem {\n label: string;\n color: string;\n }\n\n const items: SliceLegendItem[] = labels.map((label, i) => ({ label, color: colors[i] }));\n const {\n containerRef,\n \n visibleItems,\n overflowItems,\n } = useResponsiveLegend(items);\n\n return (\n <LegendContainer\n containerRef={containerRef}\n \n visibleItems={visibleItems}\n overflowItems={overflowItems}\n items={items}\n visibleLabels={visibleLabels}\n toggleLabel={toggleLabel}\n renderLabel={item => item.label}\n getColor={item => item.color}\n />\n );\n};\n\nexport default RenderSliceLegend;\n","import {\n ArcElement,\n Chart as ChartJS,\n ChartOptions,\n Legend,\n RadialLinearScale,\n Title,\n Tooltip,\n} from 'chart.js';\nimport React, { useMemo, useState } from 'react';\nimport { Theme, webLightTheme } from '@fluentui/react-components';\nimport { createFluentTooltip, useGraphUtils } from '../../hooks/useGraphUtils';\n\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\nimport { PolarArea } from 'react-chartjs-2';\nimport RenderSliceLegend from '../../components/renderSliceLegend/RenderSliceLegend';\nimport { useGraphGlobalStyles } from '../../graphGlobalStyles/useGraphGlobalStyles';\n\nChartJS.register(\n RadialLinearScale,\n ArcElement,\n Tooltip,\n Legend,\n Title,\n ChartDataLabels\n);\n\nexport interface PolarChartProps<T> {\n data: {\n label: string;\n data: T[];\n }[];\n getLabel: (datum: T) => string;\n getValue: (datum: T) => number;\n title?: string;\n showDataLabels?: boolean;\n theme?: Theme;\n}\n\nexport default function PolarChart<T extends object>({\n data,\n getLabel,\n getValue,\n title,\n showDataLabels = true,\n theme = webLightTheme,\n}: PolarChartProps<T>) {\n const { getFluentPalette, lightenColor } = useGraphUtils(theme);\n const [hiddenLabels, setHiddenLabels] = useState<string[]>([]);\n const styles = useGraphGlobalStyles();\n const toggleLabel = (label: string) => {\n setHiddenLabels(prev =>\n prev.includes(label) ? prev.filter(l => l !== label) : [...prev, label]\n );\n };\n\n const valueMap = useMemo(() => {\n const map = new Map<string, number>();\n data.forEach(series => {\n series.data.forEach(d => {\n const label = getLabel(d);\n const value = getValue(d);\n map.set(label, (map.get(label) || 0) + value);\n });\n });\n return map;\n }, [data, getLabel, getValue]);\n\nconst { allLabels, colors, filteredLabels, values, visibleColors } = useMemo(() => {\n const allLabels = Array.from(valueMap.keys());\n const palette = getFluentPalette(theme);\n const colors = allLabels.map((_, i) =>\n lightenColor(palette[i % palette.length], 0.3)\n );\n\n const filteredLabels = allLabels.filter(\n label => !hiddenLabels.includes(label)\n );\n const values = filteredLabels.map(label => valueMap.get(label) || 0);\n const visibleColors = filteredLabels.map(label => {\n const idx = allLabels.indexOf(label);\n return colors[idx];\n });\n\n return { allLabels, colors, filteredLabels, values, visibleColors };\n}, [valueMap, getFluentPalette, lightenColor, theme, hiddenLabels]);\n\nconst chartData = useMemo(() => ({\n labels: filteredLabels,\n datasets: [\n {\n data: values,\n backgroundColor: visibleColors,\n borderWidth: 1,\n },\n ],\n}), [filteredLabels, values, visibleColors]);\n\nconst options = useMemo<ChartOptions<'polarArea'>>(() => ({\n responsive: true,\n maintainAspectRatio: false,\n plugins: {\n title: {\n display: !!title,\n text: title,\n font: {\n size: 14,\n family: theme.fontFamilyBase,\n weight: theme.fontWeightSemibold,\n },\n color: theme.colorNeutralForeground1,\n padding: {\n top: 20,\n bottom: 20,\n },\n },\n datalabels: {\n display: showDataLabels,\n color: theme.colorNeutralForeground1,\n font: {\n family: theme.fontFamilyBase,\n size: parseInt(theme.fontSizeBase200.replace('px', '')) || 14,\n },\n formatter: (value: number) => value,\n },\n tooltip: createFluentTooltip<'polarArea'>(theme),\n legend: { display: false },\n },\n scales: {\n r: {\n ticks: {\n color: theme.colorNeutralForeground1,\n backdropColor: 'transparent',\n font: {\n family: theme.fontFamilyBase,\n size: parseInt(theme.fontSizeBase200.replace('px', '')) || 14,\n },\n },\n grid: {\n color: theme.colorNeutralStroke2,\n },\n },\n },\n}), [theme, title, showDataLabels, createFluentTooltip]);\n\n return (\n <div className={styles.chartWithLegend}>\n <div className={styles.chartArea}>\n <PolarArea data={chartData} options={options} />\n </div>\n <div className={styles.legendArea}>\n <RenderSliceLegend\n labels={allLabels}\n colors={colors}\n visibleLabels={filteredLabels}\n toggleLabel={toggleLabel}\n />\n </div>\n </div>\n );\n}\n","import {\n Chart as ChartJS,\n ChartOptions,\n Filler,\n Legend,\n LineElement,\n PointElement,\n RadialLinearScale,\n Title,\n Tooltip,\n} from 'chart.js';\nimport React, { useMemo, useState } from 'react';\nimport { Theme, webLightTheme } from '@fluentui/react-components';\nimport { createFluentTooltip, useGraphUtils } from '../../hooks/useGraphUtils';\n\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\nimport { Radar } from 'react-chartjs-2';\nimport RenderLegend from '../../components/RenderLegend/RenderLegend';\nimport { useGraphGlobalStyles } from '../../graphGlobalStyles/useGraphGlobalStyles';\n\nChartJS.register(ChartDataLabels);\nChartJS.register(\n RadialLinearScale,\n PointElement,\n LineElement,\n Filler,\n Tooltip,\n Legend,\n Title\n);\n\nexport interface RadarChartProps<T> {\n data: { label: string; data: T[] }[];\n getLabel: (datum: T) => string;\n getValue: (datum: T) => number;\n title?: string; \n showDataLabels?: boolean;\n theme?: Theme;\n}\n\nexport default function RadarChart<T extends object>({\n data,\n getLabel,\n getValue,\n title,\n showDataLabels = false,\n theme = webLightTheme, \n}: RadarChartProps<T>) {\n const [visibleSeries, setVisibleSeries] = useState(() =>\n data.map(s => s.label)\n );\n\n const styles = useGraphGlobalStyles();\n const { lightenColor, getFluentPalette } = useGraphUtils(theme);\n\n const seriesColors = useMemo(() => {\n return data.reduce((acc, series, idx) => {\n const base = getFluentPalette(theme)[\n idx % getFluentPalette(theme).length\n ];\n acc[series.label] = lightenColor(base, 0.3);\n return acc;\n }, {} as Record<string, string>);\n }, [data, getFluentPalette, lightenColor, theme]);\n\n const toggleSeries = (label: string) => {\n setVisibleSeries(prev =>\n prev.includes(label) ? prev.filter(l => l !== label) : [...prev, label]\n );\n };\n\n const allLabels = useMemo(() => {\n const set = new Set<string>();\n data.forEach(series => {\n series.data.forEach(d => set.add(getLabel(d)));\n });\n return Array.from(set);\n }, [data, getLabel]);\n\n const chartData = useMemo(() => {\n return {\n labels: allLabels,\n datasets: data\n .filter(series => visibleSeries.includes(series.label))\n .map(series => ({\n label: series.label,\n data: allLabels.map(label => {\n const match = series.data.find(d => getLabel(d) === label);\n return match ? getValue(match) : 0;\n }),\n backgroundColor: seriesColors[series.label] + '33',\n borderColor: seriesColors[series.label],\n borderWidth: 2,\n pointBackgroundColor: seriesColors[series.label],\n })),\n };\n }, [data, visibleSeries, allLabels, getLabel, getValue, seriesColors]);\n\n const { fontFamily, fontSize, labelColor, gridColor } = useMemo(() => ({\n fontFamily: theme.fontFamilyBase,\n fontSize: parseInt(theme.fontSizeBase200.replace('px', '')) || 14,\n labelColor: theme.colorNeutralForeground1,\n gridColor: theme.colorNeutralStroke2,\n }), [theme]);\n\n const options = useMemo<ChartOptions<'radar'>>(() => ({\n responsive: true,\n maintainAspectRatio: false,\n plugins: {\n title: {\n display: !!title,\n text: title,\n font: {\n size: 14,\n family: theme.fontFamilyBase,\n weight: theme.fontWeightSemibold,\n },\n color: theme.colorNeutralForeground1,\n padding: {\n top: 20,\n bottom: 20,\n },\n },\n datalabels: {\n display: showDataLabels,\n color: theme.colorNeutralForeground1,\n font: {\n family: theme.fontFamilyBase,\n size: parseInt(theme.fontSizeBase200.replace('px', '')) || 14,\n },\n },\n tooltip: createFluentTooltip<'radar'>(theme),\n legend: { display: false },\n },\n scales: {\n r: {\n angleLines: { color: gridColor },\n grid: { color: gridColor },\n pointLabels: {\n color: labelColor,\n font: { family: fontFamily, size: fontSize },\n },\n ticks: {\n color: labelColor,\n font: { family: fontFamily, size: fontSize },\n },\n },\n },\n }), [\n theme,\n title,\n showDataLabels,\n createFluentTooltip,\n gridColor,\n labelColor,\n fontFamily,\n fontSize,\n ]);\n\n return (\n <div className={styles.chartWithLegend}>\n <div className={styles.chartArea}>\n <Radar data={chartData} options={options} />\n </div>\n <RenderLegend\n data={data}\n visibleSeries={visibleSeries}\n seriesColors={seriesColors}\n toggleSeries={toggleSeries}\n />\n </div>\n );\n}\n","import {\n Chart as ChartJS,\n ChartOptions,\n Legend,\n LinearScale,\n PointElement,\n Tooltip,\n} from 'chart.js';\nimport React, { useMemo, useState } from 'react';\nimport { Theme, webLightTheme } from '@fluentui/react-components';\n\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\nimport RenderLegend from '../../components/RenderLegend/RenderLegend';\nimport { Scatter } from 'react-chartjs-2';\nimport { useGraphGlobalStyles } from '../../graphGlobalStyles/useGraphGlobalStyles';\nimport { useGraphUtils } from '../../hooks/useGraphUtils';\n\nChartJS.register(ChartDataLabels);\nChartJS.register(LinearScale, PointElement, Tooltip, Legend);\n\nexport interface ScatterChartProps<T> {\n data: { label: string; data: T[] }[];\n getX: (datum: T) => number;\n getY: (datum: T) => number;\n title?: string;\n showDataLabels?: boolean;\n theme?: Theme;\n}\n\nexport default function ScatterChart<T extends object>({\n data,\n getX,\n getY,\n title,\n showDataLabels = false,\n theme = webLightTheme,\n}: ScatterChartProps<T>) {\n const [visibleSeries, setVisibleSeries] = useState(() =>\n data.map(s => s.label)\n );\n const styles = useGraphGlobalStyles();\n const { getFluentPalette, lightenColor, createFluentTooltip } = useGraphUtils(\n theme\n );\n\n const seriesColors = useMemo(() => {\n return data.reduce((acc, series, idx) => {\n const base = getFluentPalette(theme)[\n idx % getFluentPalette(theme).length\n ];\n acc[series.label] = lightenColor(base, 0.3);\n return acc;\n }, {} as Record<string, string>);\n }, [data, theme]);\n\n const toggleSeries = React.useCallback((label: string) => {\n setVisibleSeries(prev =>\n prev.includes(label) ? prev.filter(l => l !== label) : [...prev, label]\n );\n }, []);\n\n const chartData = useMemo(() => {\n return {\n datasets: data\n .filter(series => visibleSeries.includes(series.label))\n .map(series => ({\n label: series.label,\n data: series.data.map(d => ({ x: getX(d), y: getY(d) })),\n backgroundColor: seriesColors[series.label],\n borderColor: seriesColors[series.label],\n pointRadius: 4,\n })),\n };\n }, [data, visibleSeries, getX, getY, seriesColors]);\n\nconst { fontFamily, fontSize, labelColor, gridColor } = useMemo(() => ({\n fontFamily: theme.fontFamilyBase,\n fontSize: parseInt(theme.fontSizeBase200.replace('px', '')) || 14,\n labelColor: theme.colorNeutralForeground1,\n gridColor: theme.colorNeutralStroke2,\n}), [theme]);\n\nconst options = useMemo<ChartOptions<'scatter'>>(() => ({\n responsive: true,\n maintainAspectRatio: false,\n plugins: {\n title: {\n display: !!title,\n text: title,\n font: {\n size: 14,\n family: theme.fontFamilyBase,\n weight: theme.fontWeightSemibold,\n },\n color: theme.colorNeutralForeground1,\n padding: {\n top: 20,\n bottom: 20,\n },\n },\n datalabels: {\n display: showDataLabels,\n color: theme.colorNeutralForeground1,\n font: {\n family: theme.fontFamilyBase,\n size: parseInt(theme.fontSizeBase200.replace('px', '')) || 14,\n },\n },\n legend: { display: false },\n tooltip: createFluentTooltip<'scatter'>(theme),\n },\n scales: {\n x: {\n type: 'linear',\n position: 'bottom',\n ticks: {\n color: labelColor,\n font: { family: fontFamily, size: fontSize },\n },\n grid: { color: gridColor },\n },\n y: {\n type: 'linear',\n ticks: {\n color: labelColor,\n font: { family: fontFamily, size: fontSize },\n },\n grid: { color: gridColor },\n },\n },\n}), [\n theme,\n title,\n showDataLabels,\n createFluentTooltip,\n labelColor,\n fontFamily,\n fontSize,\n gridColor,\n]);\n\n return (\n <div className={styles.chartWithLegend}>\n <div className={styles.chartArea}>\n <Scatter data={chartData} options={options} />\n </div>\n <RenderLegend\n data={data}\n visibleSeries={visibleSeries}\n seriesColors={seriesColors}\n toggleSeries={toggleSeries}\n />\n </div>\n );\n}\n","import {\n CategoryScale,\n Chart as ChartJS,\n ChartOptions,\n Legend,\n LineElement,\n LinearScale,\n PointElement,\n Title,\n Tooltip,\n} from 'chart.js';\nimport React, { useMemo, useState } from 'react';\nimport { Theme, webLightTheme } from '@fluentui/react-components';\n\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\nimport { Line } from 'react-chartjs-2';\nimport RenderLegend from '../../components/RenderLegend/RenderLegend';\nimport { useGraphGlobalStyles } from '../../graphGlobalStyles/useGraphGlobalStyles';\nimport { useGraphUtils } from '../../hooks/useGraphUtils';\n\nChartJS.register(ChartDataLabels);\nChartJS.register(\n CategoryScale,\n LinearScale,\n LineElement,\n PointElement,\n Tooltip,\n Legend,\n Title\n);\n\nexport interface StackedLineChartProps<T> {\n data: { label: string; data: T[] }[]; \n getPrimary: (datum: T) => string | number;\n getSecondary: (datum: T) => number;\n title?: string;\n showDataLabels?: boolean;\n theme?: Theme;\n}\n\nexport default function StackedLineChart<T extends object>({\n data,\n getPrimary,\n getSecondary,\n title,\n showDataLabels = false,\n theme = webLightTheme,\n}: StackedLineChartProps<T>) {\n const [visibleSeries, setVisibleSeries] = useState(() =>\n data.length > 1 ? data.map(s => s.label) : [data[0]?.label]\n );\n\n const styles = useGraphGlobalStyles();\n const { lightenColor, getFluentPalette, createFluentTooltip } = useGraphUtils(theme);\n\n const seriesColors = useMemo(() => {\n return data.reduce((acc, series, idx) => {\n const base = getFluentPalette(theme)[\n idx % getFluentPalette(theme).length\n ];\n const color = lightenColor(base, 0.3);\n acc[series.label] = color;\n return acc;\n }, {} as Record<string, string>);\n }, [data, theme]);\n\n const toggleSeries = (label: string) => {\n setVisibleSeries(prev => {\n const isVisible = prev.includes(label);\n const next = isVisible ? prev.filter(l => l !== label) : [...prev, label];\n return next.length === 0 && data.length > 0 ? [data[0].label] : next;\n });\n };\n\n const allCategories = useMemo(() => {\n const set = new Set<string | number>();\n data.forEach(series => {\n series.data.forEach(d => set.add(getPrimary(d)));\n });\n return Array.from(set);\n }, [data, getPrimary]);\n\n const chartData = useMemo(() => {\n return {\n labels: allCategories,\n datasets: data\n .filter(series => visibleSeries.includes(series.label))\n .map(series => ({\n label: series.label,\n data: allCategories.map(cat => {\n const match = series.data.find(d => getPrimary(d) === cat);\n return match ? getSecondary(match) : 0;\n }),\n borderColor: seriesColors[series.label],\n backgroundColor: seriesColors[series.label],\n fill: true,\n tension: 0.4,\n pointRadius: 3,\n })),\n };\n }, [\n data,\n visibleSeries,\n allCategories,\n getPrimary,\n getSecondary,\n seriesColors,\n ]);\n\nconst { fontFamily, fontSize, labelColor, gridColor } = useMemo(() => ({\n fontFamily: theme.fontFamilyBase,\n fontSize: parseInt(theme.fontSizeBase200.replace('px', '')) || 14,\n labelColor: theme.colorNeutralForeground1,\n gridColor: theme.colorNeutralStroke2,\n}), [theme]);\n\nconst options = useMemo<ChartOptions<'line'>>(() => ({\n responsive: true,\n maintainAspectRatio: false,\n plugins: {\n title: {\n display: !!title,\n text: title,\n font: {\n size: 14,\n family: theme.fontFamilyBase,\n weight: theme.fontWeightSemibold,\n },\n color: theme.colorNeutralForeground1,\n padding: {\n top: 20,\n bottom: 20,\n },\n },\n datalabels: {\n display: showDataLabels,\n color: theme.colorNeutralForeground1,\n font: {\n family: theme.fontFamilyBase,\n size: parseInt(theme.fontSizeBase200.replace('px', '')) || 14,\n },\n },\n legend: { display: false },\n tooltip: createFluentTooltip<'line'>(theme),\n },\n scales: {\n x: {\n stacked: true,\n ticks: {\n color: labelColor,\n font: { family: fontFamily, size: fontSize },\n },\n grid: { color: gridColor },\n },\n y: {\n stacked: true,\n ticks: {\n color: labelColor,\n font: { family: fontFamily, size: fontSize },\n },\n grid: { color: gridColor },\n },\n },\n}), [\n theme,\n title,\n showDataLabels,\n createFluentTooltip,\n labelColor,\n fontFamily,\n fontSize,\n gridColor,\n]);\n\n return (\n <div className={styles.chartWithLegend}>\n <div className={styles.chartArea}>\n <Line data={chartData} options={options} />\n </div>\n <RenderLegend\n data={data}\n visibleSeries={visibleSeries}\n seriesColors={seriesColors}\n toggleSeries={toggleSeries}\n />\n </div>\n );\n}\n","import {\n CategoryScale,\n Chart as ChartJS,\n ChartOptions,\n Filler,\n Legend,\n LineElement,\n LinearScale,\n PointElement,\n Title,\n Tooltip,\n} from 'chart.js';\nimport React, { useMemo, useState } from 'react';\nimport { Theme, ToggleButton, webLightTheme } from '@fluentui/react-components';\nimport { createFluentTooltip, useGraphUtils } from '../../hooks/useGraphUtils';\n\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\nimport { Line } from 'react-chartjs-2';\nimport RenderLegend from '../../components/RenderLegend/RenderLegend';\nimport { Stack } from '../../components/stack/Stack';\nimport { useGraphGlobalStyles } from '../../graphGlobalStyles/useGraphGlobalStyles';\n\nChartJS.register(ChartDataLabels);\nChartJS.register(\n LineElement,\n PointElement,\n Filler, \n CategoryScale,\n LinearScale,\n Tooltip,\n Legend,\n Title\n);\n\nexport interface SteamChartProps<T> {\n data: { label: string; data: T[] }[]; \n getPrimary: (datum: T) => string | number;\n getSecondary: (datum: T) => number;\n title?: string;\n showDataLabels?: boolean;\n theme?: Theme;\n}\n\nexport default function SteamChart<T extends object>({\n data,\n getPrimary,\n getSecondary,\n title,\n showDataLabels = false,\n theme = webLightTheme,\n}: SteamChartProps<T>) {\n const [visibleSeries, setVisibleSeries] = useState(() =>\n data.length > 1 ? data.map(s => s.label) : [data[0]?.label]\n );\n const [showPercent, setShowPercent] = useState(false);\nconst styles = useGraphGlobalStyles();\n \n const { lightenColor, getFluentPalette } = useGraphUtils(theme);\n\n const seriesColors = useMemo(() => {\n return data.reduce((acc, series, idx) => {\n const base = getFluentPalette(theme)[\n idx % getFluentPalette(theme).length\n ];\n acc[series.label] = lightenColor(base, 0.3);\n return acc;\n }, {} as Record<string, string>);\n }, [data, getFluentPalette, lightenColor, theme]);\n\n const toggleSeries = React.useCallback(\n (label: string) => {\n setVisibleSeries(prev => {\n const isVisible = prev.includes(label);\n const next = isVisible\n ? prev.filter(l => l !== label)\n : [...prev, label];\n return next.length === 0 ? [data[0].label] : next;\n });\n },\n [data]\n );\n\n const allLabels = useMemo(() => {\n const set = new Set<string | number>();\n data.forEach(series => {\n series.data.forEach(d => set.add(getPrimary(d)));\n });\n return Array.from(set);\n }, [data, getPrimary]);\n\n const totalPerPoint = useMemo(() => {\n return allLabels.map(cat =>\n data.reduce((sum, series) => {\n const match = series.data.find(d => getPrimary(d) === cat);\n return sum + (match ? getSecondary(match) : 0);\n }, 0)\n );\n }, [allLabels, data, getPrimary, getSecondary]);\n\n const chartData = useMemo(() => {\n return {\n labels: allLabels,\n datasets: data\n .filter(series => visibleSeries.includes(series.label))\n .map((series, ) => ({\n label: series.label,\n fill: true,\n backgroundColor: seriesColors[series.label],\n borderColor: 'transparent',\n borderWidth: 0,\n data: allLabels.map((cat, index) => {\n const match = series.data.find(d => getPrimary(d) === cat);\n const rawValue = match ? getSecondary(match) : 0;\n const total = totalPerPoint[index] || 1;\n return showPercent\n ? Math.round(((rawValue / total) * 100 + Number.EPSILON) * 100) / 100\n : Math.round((rawValue + Number.EPSILON) * 100) / 100;\n }),\n tension: 0.5,\n })),\n };\n }, [\n data,\n visibleSeries,\n allLabels,\n getPrimary,\n getSecondary,\n seriesColors,\n totalPerPoint,\n showPercent,\n ]);\n\nconst { fontFamily, fontSize, labelColor, gridColor } = useMemo(() => ({\n fontFamily: theme.fontFamilyBase,\n fontSize: parseInt(theme.fontSizeBase200.replace('px', '')) || 14,\n labelColor: theme.colorNeutralForeground1,\n gridColor: theme.colorNeutralStroke2,\n}), [theme]);\n\nconst options = useMemo<ChartOptions<'line'>>(() => ({\n responsive: true,\n maintainAspectRatio: false,\n animation: {\n duration: 800,\n easing: 'easeOutQuart',\n },\n plugins: {\n title: {\n display: !!title,\n text: title,\n font: {\n size: 14,\n family: theme.fontFamilyBase,\n weight: theme.fontWeightSemibold,\n },\n color: theme.colorNeutralForeground1,\n padding: {\n top: 20,\n bottom: 20,\n },\n },\n datalabels: {\n display: showDataLabels,\n color: theme.colorNeutralForeground1,\n font: {\n family: theme.fontFamilyBase,\n size: parseInt(theme.fontSizeBase200.replace('px', '')) || 14,\n },\n },\n legend: { display: false },\n tooltip: createFluentTooltip<'line'>(theme),\n },\n interaction: {\n mode: 'index',\n intersect: false,\n },\n scales: {\n x: {\n stacked: true,\n ticks: {\n color: labelColor,\n font: { family: fontFamily, size: fontSize },\n },\n grid: { color: gridColor },\n },\n y: {\n stacked: true,\n ticks: {\n callback: (value: string | number) => (showPercent ? `${value}%` : value),\n color: labelColor,\n font: { family: fontFamily, size: fontSize },\n },\n grid: { color: gridColor },\n min: 0,\n max: showPercent ? 100 : undefined,\n },\n },\n}), [\n theme,\n title,\n showDataLabels,\n createFluentTooltip,\n labelColor,\n fontFamily,\n fontSize,\n gridColor,\n showPercent,\n]);\n\n return (\n <div className={styles.chartWithLegend}>\n <div className={styles.chartArea}>\n <Line data={chartData} options={options} />\n </div>\n <Stack justifyContent=\"center\" alignItems=\"center\" margin=\"7px\">\n <ToggleButton\n onClick={() => setShowPercent(p => !p)}\n shape=\"circular\"\n appearance=\"secondary\"\n size=\"small\"\n style={{ width: '150px' }}\n >\n {showPercent ? 'Show Raw Values' : 'Show %'}\n </ToggleButton>\n </Stack>\n <div className={styles.legendArea}>\n <RenderLegend\n data={data}\n visibleSeries={visibleSeries}\n seriesColors={seriesColors}\n toggleSeries={toggleSeries}\n />\n </div>\n </div>\n );\n}\n","import {\n ChartType,\n TooltipCallbacks,\n TooltipItem,\n TooltipModel,\n TooltipOptions,\n} from 'chart.js';\nimport { Theme, webLightTheme } from '@fluentui/react-components';\n\nimport AreaChart from '../charts/areaChart/AreaChart';\nimport BarChart from '../charts/BarChart/BarChart';\nimport BarHorizontalChart from '../charts/barHorizontalChart/BarHotizontalChart';\nimport BubbleChart from '../charts/bubbleChart/BubbleChart';\nimport ComboChart from '../charts/ComboChart/ComboChart';\nimport DoughnutChart from '../charts/Doughnut/DoughnutChart';\nimport FloatingBarChart from '../charts/floatBarChart/FloatBarChart';\nimport { IChart } from '../models/IChart';\nimport LineChart from '../charts/lineChart/LineChart';\nimport PieChart from '../charts/PieChart/PieChart';\nimport PolarChart from '../charts/polarChart/PolarChart';\nimport RadarChart from '../charts/radarChart/RadarChart';\nimport React from 'react';\nimport ScatterChart from '../charts/scatterChart/ScatterChart';\nimport StackedLineChart from '../charts/stackedLineChart/StackedLineChart';\nimport SteamChart from '../charts/steamChart/SteamChart';\nimport { useMemo } from 'react';\n\n/**\n * Lightens a given hex color by a percentage amount (0 to 1).\n */\nexport const lightenColor = (hex: string, amount: number): string => {\n if (!/^#?[0-9A-Fa-f]{6}$/.test(hex)) return hex;\n if (hex.startsWith('#')) hex = hex.slice(1);\n\n let r = parseInt(hex.slice(0, 2), 16);\n let g = parseInt(hex.slice(2, 4), 16);\n let b = parseInt(hex.slice(4, 6), 16);\n\n r = Math.min(255, Math.floor(r + (255 - r) * amount));\n g = Math.min(255, Math.floor(g + (255 - g) * amount));\n b = Math.min(255, Math.floor(b + (255 - b) * amount));\n\n const toHex = (v: number) => v.toString(16).padStart(2, '0');\n return `#${toHex(r)}${toHex(g)}${toHex(b)}`;\n};\n\nexport const getFluentPalette = (_theme: Theme): string[] => [\n '#4e79a7',\n '#f28e2c',\n '#e15759',\n '#76b7b2',\n '#59a14f',\n '#edc949',\n '#af7aa1',\n '#ff9da7',\n '#9c755f',\n '#bab0ab',\n '#8cd17d',\n '#b6992d',\n '#d37295',\n '#fabfd2',\n '#79706e',\n];\n\nconst chartProps = (chart: IChart) => ({\n data: chart.data,\n title: chart.title,\n getPrimary: (d: any) => d.name,\n getSecondary: (d: any) => d.value,\n});\n\nconst getChartComponent = (chart: IChart, theme: Theme) => {\n const { type } = chart;\n const fuiTheme = theme ?? webLightTheme; \n switch (type) {\n case 'bar':\n return <BarChart {...chartProps(chart)} stacked={false} theme={fuiTheme} />;\n case 'line':\n return <LineChart {...chartProps(chart)} theme={fuiTheme} />;\n case 'area':\n return <AreaChart {...chartProps(chart)} stacked={false} theme={fuiTheme} />;\n\n case 'bar-horizontal':\n return <BarHorizontalChart {...chartProps(chart)} stacked={true} theme={fuiTheme} />;\n case 'bubble':\n return (\n <BubbleChart {...chartProps(chart)} getRadius={d => d.radius ?? 1} theme={fuiTheme} />\n );\n case 'multiple-axes':\n return (\n <ComboChart\n {...chartProps(chart)}\n theme={fuiTheme}\n \n data={chart.data.map((series: any) => ({\n label: series.label,\n type: series.type ?? 'bar',\n data: series.data,\n yAxisID: series.secondaryAxisId,\n \n }))}\n />\n );\n case 'steam':\n return <SteamChart {...chartProps(chart)} theme={fuiTheme} />;\n case 'floating-bar':\n return (\n <FloatingBarChart\n getRange={d => [d.min ?? 0, d.max ?? 0]}\n {...chartProps(chart)}\n theme={fuiTheme}\n />\n );\n case 'stacked-line':\n return <StackedLineChart {...chartProps(chart)} theme={fuiTheme} />;\n case 'doughnut':\n return (\n <DoughnutChart\n getLabel={datum => datum.name}\n getValue={datum => datum.value ?? 0}\n {...chartProps(chart)}\n theme={fuiTheme}\n />\n );\n case 'pie':\n return (\n <PieChart\n getLabel={datum => datum.name}\n getValue={datum => datum.value ?? 0}\n showDataLabels={true}\n {...chartProps(chart)}\n theme={fuiTheme}\n />\n );\n case 'scatter':\n return (\n <ScatterChart\n getX={d => {\n if (typeof d.x === 'number') return d.x;\n if (typeof d.x === 'string') return Number(d.x) || 0;\n if (d.x instanceof Date) return d.x.getTime();\n return 0;\n }}\n getY={d => (typeof d.y === 'number' ? d.y : 0)}\n {...chartProps(chart)}\n theme={fuiTheme}\n showDataLabels={false}\n />\n );\n case 'polar':\n return (\n <PolarChart\n data={chart.data}\n getLabel={d => d.name}\n getValue={d => d.value ?? 0}\n title={chart.title}\n showDataLabels={true} \n theme={fuiTheme}\n />\n );\n case 'radar':\n return (\n <RadarChart\n data={chart.data}\n getLabel={d => d.name}\n getValue={d => d.value ?? 0}\n title={chart.title}\n theme={fuiTheme}\n />\n );\n\n default:\n throw new Error(`Unsupported chart type: ${type}`);\n }\n};\n\n/**\n * Smart Fluent tooltip generator with chart-type awareness.\n */\n\nexport function createFluentTooltip<TType extends ChartType>(\n theme: Theme\n): Partial<TooltipOptions<TType>> {\n const fontFamily = theme.fontFamilyBase;\n const fontSize = parseInt(theme.fontSizeBase200.replace('px', '')) || 14;\n const tooltipBg = theme.colorNeutralBackground1;\n const tooltipTitleColor = theme.colorNeutralForeground1;\n const tooltipBodyColor = theme.colorNeutralForeground2;\n const borderColor = theme.colorNeutralStroke2;\n\n const callbacks: TooltipCallbacks<TType> = {\n title(this: TooltipModel<TType>, context: TooltipItem<TType>[]) {\n return context[0]?.label ?? '';\n },\n\n label(this: TooltipModel<TType>, item: TooltipItem<TType>) {\n const datasetLabel =\n 'label' in (item.dataset as Record<string, any>) &&\n typeof (item.dataset as Record<string, any>).label === 'string'\n ? (item.dataset as Record<string, any>).label\n : 'Value';\n\n const raw = item.raw;\n\n // Bubble format { x, y, r }\n if (\n typeof raw === 'object' &&\n raw !== null &&\n 'x' in raw &&\n 'y' in raw &&\n 'r' in raw\n ) {\n const { x, y, r } = raw as any;\n return `${datasetLabel} — x: ${x}, y: ${y}, r: ${r}`;\n }\n\n // Scatter format { x, y }\n if (typeof raw === 'object' && raw !== null && 'x' in raw && 'y' in raw) {\n const { x, y } = raw as any;\n return `${datasetLabel} — x: ${x}, y: ${y}`;\n }\n\n // Floating bar [min, max]\n if (Array.isArray(raw) && raw.length === 2) {\n const [min, max] = raw;\n return `${datasetLabel}: ${min} – ${max}`;\n }\n\n // Default: single number or string\n return `${datasetLabel}: ${raw}`;\n },\n\n beforeTitle: () => '',\n afterTitle: () => '',\n beforeBody: () => '',\n afterBody: () => '',\n beforeLabel: () => '',\n afterLabel: () => '',\n labelColor: () => undefined as any,\n labelTextColor: () => '',\n footer: () => '',\n beforeFooter: () => '',\n afterFooter: () => '',\n labelPointStyle: () => ({\n pointStyle: 'circle',\n rotation: 0,\n radius: 5,\n }),\n };\n\n return {\n enabled: true,\n displayColors: true,\n boxWidth: 10,\n boxHeight: 10,\n boxPadding: 5,\n backgroundColor: tooltipBg,\n borderColor,\n borderWidth: 1,\n cornerRadius: 4,\n padding: 10,\n titleColor: tooltipTitleColor,\n bodyColor: tooltipBodyColor,\n titleFont: { family: fontFamily, size: fontSize },\n bodyFont: { family: fontFamily, size: fontSize },\n callbacks,\n };\n}\n\n\n/**\n * Returns a Chart.js ticks callback to truncate long labels and add optional prefix/suffix.\n */\nexport const createAxisLabelFormatter = ({\n maxLength = 12,\n suffix = '',\n prefix = '',\n}: {\n maxLength?: number;\n suffix?: string;\n prefix?: string;\n}) => {\n return function (this: any, value: string | number): string {\n const label = typeof value === 'number' ? this.getLabelForValue(value) : String(value);\n const trimmed = label.length > maxLength ? label.slice(0, maxLength) + '…' : label;\n return `${prefix}${trimmed}${suffix}`;\n };\n};\n\n\nfunction debounce<T extends (...args: any[]) => void>(fn: T, delay: number): T {\n let timer: ReturnType<typeof setTimeout> | null = null;\n return function(this: any, ...args: any[]) {\n if (timer) clearTimeout(timer);\n timer = setTimeout(() => fn.apply(this, args), delay);\n } as T;\n}\n\n/**\n * useGraphUtils — shared theming and chart helpers.\n */\nexport function useGraphUtils(theme?: Theme) {\n return useMemo(\n () => ({\n lightenColor,\n getFluentPalette,\n getChartComponent,\n createFluentTooltip,\n createAxisLabelFormatter,\n debounce\n }),\n [theme]\n );\n}\n","import {\n BarElement,\n CategoryScale,\n Chart as ChartJS,\n ChartOptions,\n Legend,\n LinearScale,\n Title,\n Tooltip,\n} from 'chart.js';\nimport React, { useMemo, useState } from 'react';\nimport { createAxisLabelFormatter, useGraphUtils } from '../../hooks/useGraphUtils';\n\nimport { Bar } from 'react-chartjs-2';\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\nimport RenderLegend from '../../components/RenderLegend/RenderLegend';\nimport { Theme } from '@fluentui/react-components';\nimport { useGraphGlobalStyles } from '../../graphGlobalStyles/useGraphGlobalStyles';\n\nChartJS.register(\n CategoryScale,\n LinearScale,\n BarElement,\n Tooltip,\n Legend,\n ChartDataLabels,\n Title\n);\n\nexport interface BarProps<T> {\n data: { label: string; data: T[]; type?: 'bar' | 'line' }[];\n getPrimary: (datum: T) => string | number;\n getSecondary: (datum: T) => number;\n stacked?: boolean;\n title?: string;\n showDatalabels?: boolean;\n theme: Theme;\n}\n\nexport default function BarChart<T extends object>({\n data,\n getPrimary,\n getSecondary,\n title,\n showDatalabels = false,\n stacked = false,\n theme,\n}: BarProps<T>) {\n const [visibleSeries, setVisibleSeries] = useState(() =>\n data.length > 1 ? data.map(s => s.label) : [data[0]?.label]\n );\n\n const { lightenColor, getFluentPalette, createFluentTooltip } = useGraphUtils(\n theme\n );\n const styles = useGraphGlobalStyles();\n const seriesColors = useMemo(() => {\n return data.reduce((acc, series, idx) => {\n const base = getFluentPalette(theme)[\n idx % getFluentPalette(theme).length\n ];\n const color = lightenColor(base, 0.3);\n acc[series.label] = color;\n return acc;\n }, {} as Record<string, string>);\n }, [data]);\n\n const toggleSeries = (label: string) => {\n setVisibleSeries(prev => {\n const isVisible = prev.includes(label);\n const next = isVisible ? prev.filter(l => l !== label) : [...prev, label];\n return next.length === 0 && data.length > 0 ? [data[0].label] : next;\n });\n };\n\n // Extract all unique x-axis categories (from all series)\n const allCategories = useMemo(() => {\n const categorySet = new Set<string | number>();\n data.forEach(series => {\n series.data.forEach(datum => {\n categorySet.add(getPrimary(datum));\n });\n });\n return Array.from(categorySet);\n }, [data, getPrimary]);\n\n // Construct Chart.js datasets\n const chartData = useMemo(() => {\n return {\n labels: allCategories,\n datasets: data\n .filter(series => visibleSeries.includes(series.label))\n .map(series => ({\n label: series.label,\n backgroundColor: seriesColors[series.label],\n data: allCategories.map(cat => {\n const found = series.data.find(d => getPrimary(d) === cat);\n return found ? getSecondary(found) : 0;\n }),\n // Assign y-axis based on series type when stacked\n yAxisID: stacked ? (series.type === 'line' ? 'y1' : 'y') : 'y',\n })),\n };\n }, [data, visibleSeries, allCategories, seriesColors, stacked]);\n\n const { fontFamily, fontSize, labelColor, gridColor } = useMemo(\n () => ({\n fontFamily: theme.fontFamilyBase,\n fontSize: parseInt(theme.fontSizeBase200.replace('px', '')) || 14,\n labelColor: theme.colorNeutralForeground1,\n gridColor: theme.colorNeutralStroke2,\n }),\n [theme]\n );\n\n const options: ChartOptions<'bar'> = useMemo(\n () => ({\n responsive: true,\n maintainAspectRatio: false,\n\n plugins: {\n title: {\n display: !!title,\n text: title,\n font: {\n size: 14,\n family: theme.fontFamilyBase,\n weight: theme.fontWeightSemibold,\n },\n color: theme.colorNeutralForeground1,\n padding: {\n top: 20,\n bottom: 20,\n },\n },\n datalabels: {\n display: showDatalabels,\n color: theme.colorNeutralForeground1,\n font: {\n family: theme.fontFamilyBase,\n size: parseInt(theme.fontSizeBase200.replace('px', '')) || 14,\n },\n },\n legend: {\n display: false,\n },\n tooltip: createFluentTooltip<'bar'>(theme),\n },\n scales: {\n x: {\n stacked,\n ticks: {\n callback: createAxisLabelFormatter({ maxLength: 10 }),\n color: labelColor,\n font: {\n family: fontFamily,\n size: fontSize,\n },\n },\n grid: {\n color: gridColor,\n },\n },\n y: {\n type: 'linear',\n position: 'left',\n stacked,\n ticks: {\n callback: createAxisLabelFormatter({ maxLength: 10 }),\n color: labelColor,\n font: {\n family: fontFamily,\n size: fontSize,\n },\n },\n grid: {\n color: gridColor,\n },\n },\n ...(stacked && {\n y1: {\n type: 'linear',\n position: 'right',\n ticks: {\n callback: createAxisLabelFormatter({ maxLength: 10 }),\n color: labelColor,\n font: {\n family: fontFamily,\n size: fontSize,\n },\n },\n grid: {\n drawOnChartArea: false,\n },\n },\n }),\n },\n }),\n [\n title,\n showDatalabels,\n theme,\n fontFamily,\n fontSize,\n labelColor,\n gridColor,\n stacked,\n createFluentTooltip,\n ]\n );\n\n return (\n <div className={styles.chartWithLegend}>\n <div className={styles.chartArea}>\n <Bar data={chartData} options={options} />\n </div>\n <div className={styles.legendArea}>\n <RenderLegend\n data={data}\n visibleSeries={visibleSeries}\n seriesColors={seriesColors}\n toggleSeries={toggleSeries}\n />\n </div>\n </div>\n );\n}\n","import React from \"react\";\nimport { tokens } from \"@fluentui/react-components\";\n\ninterface BusinessReportIconProps {\n width?: number;\n height?: number;\n className?: string;\n style?: React.CSSProperties;\n}\n\nexport const BusinessReportIcon: React.FC<BusinessReportIconProps> = ({\n width = 200,\n height = 200,\n className,\n style,\n}) => {\n return (\n <svg\n width={width}\n height={height}\n viewBox=\"200 400 1400 1000\"\n className={className}\n style={{\n fill: tokens.colorNeutralForeground2,\n ...style,\n }}\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <g id=\"BACKGROUND\">\n <rect\n style={{ fill: tokens.colorNeutralBackground1 }}\n x=\"200\"\n y=\"400\"\n width=\"1400\"\n height=\"1000\"\n />\n </g>\n\n {/* Main chart/dashboard area */}\n <g>\n <g>\n <rect\n x=\"486.006\"\n y=\"568.026\"\n style={{ fill: tokens.colorNeutralBackground1 }}\n width=\"1038.994\"\n height=\"768.164\"\n />\n <path\n style={{ fill: tokens.colorNeutralStroke1 }}\n d=\"M1527.5,1338.69H483.506V565.526H1527.5V1338.69z M488.506,1333.69H1522.5V570.526H488.506V1333.69z\"\n />\n </g>\n <g>\n {/* Chart bars */}\n <rect\n x=\"558.003\"\n y=\"1086.698\"\n style={{ fill: tokens.colorNeutralForeground3, opacity: 0.3 }}\n width=\"85\"\n height=\"164.492\"\n />\n <rect\n x=\"693.003\"\n y=\"1004.672\"\n style={{ fill: tokens.colorNeutralForeground3, opacity: 0.3 }}\n width=\"85\"\n height=\"246.519\"\n />\n <rect\n x=\"828.003\"\n y=\"835.487\"\n style={{ fill: tokens.colorNeutralForeground3, opacity: 0.3 }}\n width=\"85\"\n height=\"415.703\"\n />\n <rect\n x=\"963.003\"\n y=\"955.6\"\n style={{ fill: tokens.colorNeutralForeground3, opacity: 0.3 }}\n width=\"85\"\n height=\"295.591\"\n />\n <rect\n x=\"1098.003\"\n y=\"825.238\"\n style={{ fill: tokens.colorNeutralForeground3, opacity: 0.3 }}\n width=\"85\"\n height=\"425.952\"\n />\n <rect\n x=\"1233.003\"\n y=\"847.489\"\n style={{ fill: tokens.colorNeutralForeground3, opacity: 0.3 }}\n width=\"85\"\n height=\"403.701\"\n />\n <rect\n x=\"1368.003\"\n y=\"699.989\"\n style={{ fill: tokens.colorNeutralForeground3, opacity: 0.3 }}\n width=\"85\"\n height=\"551.201\"\n />\n {/* Chart line */}\n <polygon\n style={{ fill: tokens.colorBrandBackground }}\n points=\"583.634,1185.919 581.366,1181.462 723.336,1109.231 869.748,909.808 1003.791,1050.114 1141.593,912.312 1275.235,928.549 1409.365,774.548 1413.135,777.833 1277.265,933.832 1143.407,917.569 1003.709,1057.267 870.251,917.573 726.664,1113.149\"\n />\n </g>\n {/* Chart grid lines */}\n <rect\n x=\"796.336\"\n y=\"662.857\"\n style={{ fill: tokens.colorBrandBackground }}\n width=\"418.333\"\n height=\"5\"\n />\n <rect\n x=\"937.543\"\n y=\"717.857\"\n style={{ fill: tokens.colorBrandBackground }}\n width=\"135.92\"\n height=\"5\"\n />\n </g>\n\n {/* Small chart on left */}\n <g>\n <g>\n <rect\n x=\"264.978\"\n y=\"441.049\"\n style={{ fill: tokens.colorNeutralBackground1 }}\n width=\"482.581\"\n height=\"379.067\"\n />\n <path\n style={{ fill: tokens.colorNeutralStroke1 }}\n d=\"M750.06,822.616H262.478V438.549H750.06V822.616z M267.478,817.616H745.06V443.549H267.478V817.616z\"\n />\n </g>\n <g>\n {/* Small chart elements */}\n <g>\n <rect\n x=\"330.537\"\n y=\"503.15\"\n style={{ fill: tokens.colorNeutralForeground3, opacity: 0.3 }}\n width=\"108.842\"\n height=\"61.633\"\n />\n <g>\n <rect\n x=\"485.277\"\n y=\"509.093\"\n style={{ fill: tokens.colorBrandBackground }}\n width=\"198.014\"\n height=\"2.623\"\n />\n <rect\n x=\"485.277\"\n y=\"532.656\"\n style={{ fill: tokens.colorNeutralForeground3, opacity: 0.3 }}\n width=\"198.014\"\n height=\"2.623\"\n />\n <rect\n x=\"485.277\"\n y=\"556.218\"\n style={{ fill: tokens.colorNeutralForeground3, opacity: 0.3 }}\n width=\"198.014\"\n height=\"2.623\"\n />\n </g>\n </g>\n {/* Bar chart elements */}\n <g>\n <g>\n <rect\n x=\"381.691\"\n y=\"687.747\"\n style={{ fill: tokens.colorNeutralForeground3, opacity: 0.3 }}\n width=\"22.73\"\n height=\"70.417\"\n />\n <rect\n x=\"404.421\"\n y=\"653.482\"\n style={{ fill: tokens.colorBrandBackground }}\n width=\"22.73\"\n height=\"104.682\"\n />\n </g>\n <g>\n <rect\n x=\"466.491\"\n y=\"641.634\"\n style={{ fill: tokens.colorNeutralForeground3, opacity: 0.3 }}\n width=\"22.73\"\n height=\"116.089\"\n />\n <rect\n x=\"489.221\"\n y=\"714.758\"\n style={{ fill: tokens.colorBrandBackground }}\n width=\"22.73\"\n height=\"42.965\"\n />\n </g>\n </g>\n </g>\n </g>\n </svg>\n );\n};\n\nexport default BusinessReportIcon;\n","import * as React from 'react';\n\nimport BusinessReportIcon from '../svgImages/BusinessReportIcon';\nimport Stack from '../stack/Stack';\nimport { Text } from '@fluentui/react-components';\n\nexport interface INoDashboardsProps {\n height?: string;\n}\n\nexport const NoDashboards: React.FunctionComponent<INoDashboardsProps> = (props: React.PropsWithChildren<INoDashboardsProps>) => {\n const { height } = props;\n\n return (\n <>\n <Stack\n style={{ height: height || \"100%\" }}\n justifyContent=\"Center\"\n alignItems=\"Center\"\n >\n <BusinessReportIcon width={200} height={200} />\n <Text size={500} weight='semibold'>No Dashboards Available</Text>\n </Stack>\n </>\n );\n};","/* eslint-disable @typescript-eslint/explicit-function-return-type */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n makeStyles,\n shorthands,\n} from '@fluentui/react-components';\n\nexport const useRenderLabelStyles = makeStyles({\n\n labelContainer: {\n display: \"flex\",\n flexDirection: \"row\",\n justifyContent: \"flex-start\",\n alignItems: \"center\",\n ...shorthands.gap(\"6px\"),\n },\n iconStyles: {\n width: \"26px\",\n },\n item: {\n paddingLeft: \"15px\",\n },\n \n\n});\n","import * as React from 'react';\n\nimport {\n Caption1,\n tokens,\n} from '@fluentui/react-components';\nimport { Icon } from '@iconify/react';\n\nimport { useRenderLabelStyles } from './useRenderLabelStylesStyles';\n\nexport interface IRenderLabelProps {\n label: string; icon?: string | JSX.Element; isRequired?: boolean\n}\n\nexport const RenderLabel: React.FunctionComponent<IRenderLabelProps> = (props: React.PropsWithChildren<IRenderLabelProps>) => {\n const { label, icon, isRequired } = props;\n const styles = useRenderLabelStyles();\n return (\n <>\n <div className={styles.labelContainer}>\n {icon && React.isValidElement(icon) ? (\n icon\n ) : (\n <Icon\n icon={icon as string}\n className={styles.iconStyles}\n width={\"20px\"}\n height={\"20px\"}\n color={tokens.colorBrandForeground1}\n />\n )}\n <Caption1 style={{ color: tokens.colorBrandForeground1 }}>{label}</Caption1>\n <Caption1 style={{ color: tokens.colorPaletteRedForeground1 }}>{isRequired ? \" *\" : \"\"}</Caption1>\n </div>\n </>\n );\n};\n\nexport default RenderLabel;\n","import * as React from \"react\";\n\nimport {\n Caption1,\n Menu,\n MenuButton,\n MenuPopover,\n MenuProps,\n MenuTrigger,\n Tooltip,\n tokens,\n} from \"@fluentui/react-components\";\nimport {\n Settings20Filled,\n Settings20Regular,\n bundleIcon,\n} from \"@fluentui/react-icons\";\n\nimport { Icon } from \"@iconify/react\";\nimport { RenderLabel } from \"../../RenderLabel\";\nimport { css } from \"@emotion/css\";\n\nexport interface ISelectZoomProps {\n IsOpen: boolean;\n onChange?: (value: { spanCols: number; spanRows: number }) => void;\n values: { spanCols: number; spanRows: number };\n maxCols: number;\n maxRows: number;\n}\n\nconst useStyles = (): {\n gridContainer: string;\n cell: string;\n hoveredCell: string;\n selectedCell: string;\n menuPopover: string;\n bottomText: string;\n} => ({\n gridContainer: css`\n display: grid;\n gap: 4px;\n padding: 8px;\n justify-content: center;\n `,\n cell: css`\n width: 30px;\n height: 30px;\n border: 1px solid ${tokens.colorNeutralStroke1};\n background-color: ${tokens.colorNeutralBackground1};\n cursor: pointer;\n transition: background-color 150ms ease, transform 150ms ease;\n will-change: background-color, transform;\n `,\n hoveredCell: css`\n background-color: ${tokens.colorNeutralBackground1Hover};\n transform: scale(1.05);\n `,\n selectedCell: css`\n background-color: ${tokens.colorNeutralBackground1Selected};\n `,\n menuPopover: css`\n min-width: fit-content;\n `,\n bottomText: css`\n padding-left: 8px;\n padding-right: 8px;\n `,\n \n \n});\n\nexport const SelectZoom: React.FunctionComponent<ISelectZoomProps> = (\n props: React.PropsWithChildren<ISelectZoomProps>\n) => {\n const { onChange, values: defaultValues, maxCols, maxRows } = props;\n const Settings = bundleIcon(Settings20Filled, Settings20Regular);\n const styles = useStyles();\n\n const [values, setValues] = React.useState(defaultValues);\n const [hovered, setHovered] = React.useState<{\n spanCols: number;\n spanRows: number;\n } | null>(null);\n const [open, setOpen] = React.useState(false);\n\n React.useEffect(() => {\n setValues(defaultValues);\n }, [defaultValues]);\n\n const onOpenChange: MenuProps[\"onOpenChange\"] = (_, data) => {\n setOpen(data.open);\n setHovered(null);\n };\n\n const handleCellClick = (row: number, col: number):void => {\n const newValues = { spanCols: col + 1, spanRows: row + 1 };\n setValues(newValues);\n onChange?.(newValues);\n setOpen(false);\n };\n\n const handleCellHover = (row: number, col: number):void => {\n setHovered({ spanCols: col + 1, spanRows: row + 1 });\n };\n\n const handleMouseLeave = ():void => {\n setHovered(null);\n };\n\n const renderGridCells = (): React.ReactNode[] => {\n const cells: React.ReactNode[] = [];\n for (let row = 0; row < maxRows; row++) {\n for (let col = 0; col < maxCols; col++) {\n const isSelected = row < values.spanRows && col < values.spanCols;\n const isHovered =\n hovered && row < hovered.spanRows && col < hovered.spanCols;\n cells.push(\n <div\n key={`${row}-${col}`}\n className={`${styles.cell} ${isHovered ? styles.hoveredCell : \"\"} ${\n isSelected ? styles.selectedCell : \"\"\n }`}\n onMouseEnter={() => handleCellHover(row, col)}\n onClick={() => handleCellClick(row, col)}\n />\n );\n }\n }\n return cells;\n };\n\n // Compute popover width dynamically\n const popoverWidth = React.useMemo(() => (30 * maxCols) + (4 * (maxCols - 1)) + 32, [maxCols]); // 30px for each cell, 4px gap, and 32px padding (16 left and right)\n\n return (\n <Menu open={open} onOpenChange={onOpenChange}>\n <MenuTrigger disableButtonEnhancement>\n <Tooltip content=\"Configure\" relationship=\"label\">\n <MenuButton\n icon={<Settings />}\n size=\"small\"\n appearance=\"transparent\"\n />\n </Tooltip>\n </MenuTrigger>\n\n <MenuPopover\n style={{ width: `${popoverWidth}px`, minWidth: \"120px\", padding: 8 }}\n >\n <div\n style={{\n display: \"flex\",\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: \"6px\",\n width: \"100%\",\n boxSizing: \"border-box\",\n padding: \"8px\",\n }}\n >\n <RenderLabel\n label={`Selected Span (${values.spanCols} × ${values.spanRows})`}\n icon={\n <Icon\n icon=\"fluent:number-row-20-regular\"\n width=\"32\"\n height=\"32\"\n />\n }\n />\n </div>\n\n {/* Grid */}\n <div\n className={styles.gridContainer}\n style={{\n gridTemplateColumns: `repeat(${maxCols}, 30px)`,\n gridTemplateRows: `repeat(${maxRows}, 30px)`,\n }}\n onMouseLeave={handleMouseLeave}\n >\n {renderGridCells()}\n </div>\n\n <Caption1 className={styles.bottomText}>Click to set span</Caption1>\n </MenuPopover>\n </Menu>\n );\n};\n","import { Card, CardHeader, Text, Theme } from '@fluentui/react-components';\nimport React, {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\n\nimport { ICardChartContainer } from '../../models/ICardChartContainer';\nimport { IDashboardProps } from './IDashboardProps';\nimport { NoDashboards } from './NoDashboards';\nimport { SelectZoom } from './selectZoom/SelectZoom';\nimport { useDashboardStyles } from './useDashboardStyles';\nimport { useGraphUtils } from '../../hooks';\n\nconst MINIMUM_DASHBOARD_WIDTH = 600;\nconst MAX_ROWS = 4;\n\nexport const Dashboard: React.FC<IDashboardProps> = ({\n cardCharts,\n theme,\n containerWidth,\n containerHeight = '100%',\n maxSpanRows = MAX_ROWS,\n}) => {\n const styles = useDashboardStyles();\n\n const { getChartComponent } = useGraphUtils(theme as Theme);\n\n const [CardChartContainer, setCardChartContainer] = useState<\n ICardChartContainer[]\n >([]);\n\n const [sizes, setSizes] = useState<\n Record<string, { spanCols: number; spanRows: number }>\n >({});\n const dragItem = useRef<number | null>(null);\n const dragOverItem = useRef<number | null>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n\n React.useEffect(() => {\n setCardChartContainer(cardCharts);\n setSizes(() => {\n const initialSizes: Record<\n string,\n { spanCols: number; spanRows: number }\n > = {};\n cardCharts.forEach(c => {\n initialSizes[c.id] = {\n spanCols: c.defaultSpan?.spanCols ?? 1,\n spanRows: c.defaultSpan?.spanRows ?? 1,\n };\n });\n return initialSizes;\n });\n }, [cardCharts]);\n\n useEffect(() => {\n if (containerWidth <= MINIMUM_DASHBOARD_WIDTH) {\n setSizes(() => {\n const reset: Record<\n string,\n { spanCols: number; spanRows: number }\n > = {};\n CardChartContainer.forEach(c => {\n reset[c.id] = { spanCols: 1, spanRows: 1 };\n });\n return reset;\n });\n }\n }, [containerWidth, CardChartContainer]);\n\n const showZoom = useMemo(() => containerWidth > MINIMUM_DASHBOARD_WIDTH, [\n containerWidth,\n ]);\n\n const { minCardWidth, gridGap, containerPadding } = useMemo(\n () => ({\n minCardWidth: 350,\n gridGap: 16,\n containerPadding: 20,\n }),\n []\n );\n\n const innerWidth = containerWidth - containerPadding * 2;\n const columns = useMemo(\n () => Math.floor((innerWidth + gridGap) / (minCardWidth + gridGap)),\n [innerWidth, gridGap, minCardWidth]\n );\n const maxZoom = Math.max(columns, 1);\n\n const handleSort = useCallback(() => {\n if (\n dragItem.current !== null &&\n dragOverItem.current !== null &&\n dragItem.current !== dragOverItem.current\n ) {\n const copy = [...CardChartContainer];\n const [moved] = copy.splice(dragItem.current, 1);\n copy.splice(dragOverItem.current, 0, moved);\n setCardChartContainer(copy);\n }\n dragItem.current = null;\n dragOverItem.current = null;\n }, [CardChartContainer]);\n\n const handleZoomSelect = useCallback(\n (id: string, span: { spanCols: number; spanRows: number }) => {\n setSizes(prev => ({\n ...prev,\n [id]: {\n spanCols: Math.min(Math.max(span.spanCols, 1), maxZoom),\n spanRows: Math.min(Math.max(span.spanRows, 1), maxSpanRows),\n },\n }));\n },\n [maxZoom, maxSpanRows]\n );\n\n const defaultColsAndRowSpanBasedOnNumberColumns = useMemo(() => {\n return CardChartContainer.reduce((acc, card) => {\n acc[card.id] = {\n spanCols: Math.min(card.defaultSpan?.spanCols ?? 1, columns),\n spanRows: card.defaultSpan?.spanRows ?? 1,\n };\n return acc;\n }, {} as Record<string, { spanCols: number; spanRows: number }>);\n }, [CardChartContainer, columns]);\n\n const renderCards = useMemo(() => {\n return CardChartContainer.map((cardContainer, idx) => (\n <div\n className={styles.cardWrapper}\n key={cardContainer.id}\n draggable\n onDragStart={() => (dragItem.current = idx)}\n onDragEnter={() => (dragOverItem.current = idx)}\n onDragOver={e => e.preventDefault()}\n onDragEnd={handleSort}\n style={{\n gridColumnEnd: sizes[cardContainer.id]?.spanCols\n ? `span ${sizes[cardContainer.id].spanCols}`\n : `span ${defaultColsAndRowSpanBasedOnNumberColumns[\n cardContainer.id\n ]?.spanCols || 1}`,\n gridRowEnd: sizes[cardContainer.id]?.spanRows\n ? `span ${sizes[cardContainer.id].spanRows}`\n : `span ${defaultColsAndRowSpanBasedOnNumberColumns[\n cardContainer.id\n ]?.spanRows || 1}`,\n }}\n >\n <Card className={styles.cardBody}>\n <CardHeader\n header={\n <Text weight=\"semibold\" size={400}>\n {cardContainer.cardTitle}\n </Text>\n }\n action={\n showZoom ? (\n <SelectZoom\n values={\n sizes[cardContainer.id] ||\n defaultColsAndRowSpanBasedOnNumberColumns[\n cardContainer.id\n ] || { spanCols: 1, spanRows: 1 }\n }\n maxCols={maxZoom}\n maxRows={maxSpanRows}\n IsOpen={false}\n onChange={v => handleZoomSelect(cardContainer.id, v)}\n />\n ) : (\n undefined\n )\n }\n />\n <div\n className={styles.chartContainer}\n style={{ height: containerHeight }}\n >\n {theme &&\n theme.fontSizeBase100 &&\n getChartComponent(cardContainer.chart, theme as Theme)}\n </div>\n </Card>\n </div>\n ));\n }, [\n CardChartContainer,\n handleSort,\n sizes,\n styles.cardBody,\n styles.chartContainer,\n showZoom,\n maxZoom,\n getChartComponent,\n handleZoomSelect,\n theme,\n ]);\n\n if (CardChartContainer.length === 0) {\n return <NoDashboards />;\n }\n\n return (\n <>\n <div ref={containerRef} className={styles.dashboardContainer} style={{ height: containerHeight }}>\n {renderCards}\n </div>\n </>\n );\n};\n\nexport default Dashboard;\n","import { css } from '@emotion/css';\nimport { tokens } from '@fluentui/react-components';\n\nexport const useDashboardStyles = (): {\n dashboardContainer: string;\n cardBody: string;\n chartContainer: string;\n cardDescription: string;\n cardWrapper: string;\n} => {\n return {\n dashboardContainer: css({\n display: 'grid',\n padding: '20px',\n gap: '16px',\n backgroundColor: tokens.colorNeutralBackground2,\n gridTemplateColumns: 'repeat(auto-fill, minmax(350px, 1fr))',\n gridAutoRows: '350px',\n overflowY: 'auto',\n overflowX: 'hidden',\n\n // Scrollbar styles\n '::-webkit-scrollbar': {\n width: '5px', // Width for vertical scrollbars\n height: '5px', // Height for horizontal scrollbars\n },\n '::-webkit-scrollbar-track': {\n background: tokens.colorNeutralBackground4, // Light gray for the track\n borderRadius: '10px',\n },\n '::-webkit-scrollbar-thumb': {\n background: tokens.colorBrandStroke2Hover, // Dark gray for the thumb\n borderRadius: '10px',\n },\n '::-webkit-scrollbar-thumb:hover': {\n background: tokens.colorNeutralStroke2, // Dark gray for the thumb\n },\n\n justifyContent: 'center',\n gridAutoFlow: 'dense',\n }),\n cardBody: css({\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n minHeight: '320px',\n }),\n chartContainer: css({\n flex: 1,\n width: '100%',\n minHeight: '280px',\n }),\n cardDescription: css({\n color: `${tokens.colorNeutralForeground2}`,\n marginTop: '4px',\n }),\n\n cardWrapper: css({\n position: 'relative',\n height: '100%',\n minHeight: '300px',\n borderRadius: tokens.borderRadiusMedium,\n transition: 'all 0.2s ease',\n\n '&:hover': {\n transform: 'translateY(-2px)',\n boxShadow: `${tokens.shadow16}`,\n },\n\n '&:active': {\n transform: 'translateY(0)',\n boxShadow: `${tokens.shadow8}`,\n },\n }),\n };\n};\n"],"names":["LegendButton","_ref","label","isVisible","color","_ref$style","style","React","Tooltip","content","relationship","Button","ref","buttonRef","shape","size","appearance","onClick","_extends","backgroundColor","tokens","colorNeutralForeground1","borderColor","borderWidth","width","padding","textAlign","Caption1","as","display","overflow","textOverflow","whiteSpace","lineHeight","sizeMap","xs","spacingHorizontalXS","s","spacingHorizontalS","m","spacingHorizontalM","l","spacingHorizontalL","xl","spacingHorizontalXL","xxl","spacingHorizontalXXL","Stack","memo","direction","_ref$justifyContent","justifyContent","_ref$alignItems","alignItems","gap","columnGap","rowGap","margin","marginTop","marginBottom","marginLeft","marginRight","paddingTop","paddingBottom","paddingLeft","paddingRight","_ref$wrap","wrap","children","className","stackStyle","css","flexDirection","_ref$direction","height","flexWrap","background","mergeClasses","displayName","styles","wrapper","boxSizing","LegendContainer","props","overflowItems","visibleLabels","toggleLabel","renderLabel","getColor","containerRef","visibleItems","map","item","length","includes","key","Menu","MenuTrigger","disableButtonEnhancement","MenuButton","MenuPopover","minWidth","maxWidth","MenuList","MenuItem","useResponsiveLegend","items","useRef","_useState","useState","maxVisible","setMaxVisible","debounce","useGraphUtils","useEffect","measure","containerWidth","_containerRef$current","_containerRef$current2","current","offsetWidth","count","Math","floor","BUTTON_WIDTH","debouncedMeasure","observer","ResizeObserver","observe","disconnect","slice","RenderLegend","data","visibleSeries","seriesColors","toggleSeries","_useResponsiveLegend","d","useGraphGlobalStyles","chartWithLegend","chartArea","flexGrow","minHeight","_templateObject","_taggedTemplateLiteralLoose","legendArea","_templateObject2","AreaChart","getPrimary","getSecondary","title","_ref$showDatalabels","showDatalabels","_ref$theme","theme","webLightTheme","_ref$stacked","stacked","_data$","setVisibleSeries","_useGraphUtils","lightenColor","getFluentPalette","createFluentTooltip","useMemo","reduce","acc","series","idx","base","allCategories","set","Set","forEach","add","Array","from","chartData","labels","datasets","filter","cat","match","find","fill","tension","pointRadius","_useMemo","fontFamily","fontFamilyBase","fontSize","parseInt","fontSizeBase200","replace","labelColor","gridColor","colorNeutralStroke2","options","responsive","maintainAspectRatio","plugins","text","font","family","weight","fontWeightSemibold","top","bottom","datalabels","legend","tooltip","scales","x","ticks","grid","y","Line","prev","next","concat","BarHorizontalChart","categorySet","datum","found","indexAxis","Bar","BubbleChart","getRadius","showDataLabels","r","colorNeutralStroke1","hoverBorderWidth","_data$2","type","Bubble","ComboChart","_ref$showDataLabels","sortedSeries","sort","a","b","_series$yAxisID","yAxisID","order","position","Chart","register","CategoryScale","LinearScale","PointElement","LineElement","Filler","Legend","ChartDataLabels","Title","ChartJS","BarElement","RenderValueLegend","entries","entry","value","DoughnutChart","getLabel","getValue","hiddenLabels","setHiddenLabels","valueMap","Map","get","allLabels","keys","palette","colors","_","i","_useMemo2","filteredLabels","values","visibleColors","indexOf","legendEntries","formatter","Doughnut","FloatingBarChart","getRange","borderRadius","LineChart","PieChart","Pie","ArcElement","RenderSliceLegend","PolarChart","backdropColor","PolarArea","RadarChart","pointBackgroundColor","angleLines","pointLabels","Radar","ScatterChart","getX","getY","useCallback","Scatter","StackedLineChart","SteamChart","_useState2","showPercent","setShowPercent","totalPerPoint","sum","index","rawValue","round","Number","EPSILON","animation","duration","easing","interaction","mode","intersect","callback","min","max","undefined","ToggleButton","p","RadialLinearScale","hex","amount","test","startsWith","g","toHex","v","toString","padStart","_theme","chartProps","chart","name","getChartComponent","fuiTheme","BarChart","_d$radius","radius","_series$type","secondaryAxisId","_d$min","_d$max","_datum$value","_datum$value2","Date","getTime","_d$value","_d$value2","Error","enabled","displayColors","boxWidth","boxHeight","boxPadding","colorNeutralBackground1","cornerRadius","titleColor","bodyColor","colorNeutralForeground2","titleFont","bodyFont","callbacks","context","_context$0$label","_context$","datasetLabel","dataset","raw","isArray","beforeTitle","afterTitle","beforeBody","afterBody","beforeLabel","afterLabel","labelTextColor","footer","beforeFooter","afterFooter","labelPointStyle","pointStyle","rotation","createAxisLabelFormatter","maxLength","_ref$maxLength","_ref$suffix","suffix","_ref$prefix","prefix","this","getLabelForValue","String","trimmed","fn","delay","timer","args","_len","_key","arguments","clearTimeout","setTimeout","apply","_this","y1","drawOnChartArea","BusinessReportIcon","_ref$height","_ref$width","viewBox","xmlns","id","colorNeutralForeground3","opacity","colorBrandBackground","points","NoDashboards","Text","useRenderLabelStyles","makeStyles","labelContainer","shorthands","iconStyles","RenderLabel","icon","isRequired","Icon","colorBrandForeground1","colorPaletteRedForeground1","SelectZoom","onChange","defaultValues","maxCols","maxRows","Settings","bundleIcon","Settings20Filled","Settings20Regular","gridContainer","cell","hoveredCell","_templateObject3","colorNeutralBackground1Hover","selectedCell","_templateObject4","colorNeutralBackground1Selected","menuPopover","_templateObject5","bottomText","_templateObject6","_React$useState","setValues","_React$useState2","hovered","setHovered","_React$useState3","open","setOpen","popoverWidth","onOpenChange","spanCols","spanRows","gridTemplateColumns","gridTemplateRows","onMouseLeave","cells","_loop","row","_loop2","col","push","onMouseEnter","handleCellHover","newValues","handleCellClick","renderGridCells","cardCharts","_ref$containerHeight","containerHeight","_ref$maxSpanRows","maxSpanRows","dashboardContainer","colorNeutralBackground2","gridAutoRows","overflowY","overflowX","::-webkit-scrollbar","::-webkit-scrollbar-track","colorNeutralBackground4","::-webkit-scrollbar-thumb","colorBrandStroke2Hover","::-webkit-scrollbar-thumb:hover","gridAutoFlow","cardBody","chartContainer","flex","cardDescription","cardWrapper","borderRadiusMedium","transition","&:hover","transform","boxShadow","shadow16","&:active","shadow8","CardChartContainer","setCardChartContainer","sizes","setSizes","dragItem","dragOverItem","initialSizes","c","_c$defaultSpan$spanCo","_c$defaultSpan","defaultSpan","_c$defaultSpan$spanRo","_c$defaultSpan2","reset","showZoom","minCardWidth","gridGap","containerPadding","innerWidth","columns","maxZoom","handleSort","copy","_copy$splice","splice","handleZoomSelect","span","_extends2","defaultColsAndRowSpanBasedOnNumberColumns","card","_card$defaultSpan$spa","_card$defaultSpan","_card$defaultSpan$spa2","_card$defaultSpan2","renderCards","cardContainer","_sizes$cardContainer$","_defaultColsAndRowSpa","_sizes$cardContainer$2","_defaultColsAndRowSpa2","draggable","onDragStart","onDragEnter","onDragOver","e","preventDefault","onDragEnd","gridColumnEnd","gridRowEnd","Card","CardHeader","header","cardTitle","action","IsOpen","fontSizeBase100"],"mappings":"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"}