@spteck/fluentui-react-charts 1.0.6 → 1.0.7

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/hooks/useChartUtils.tsx","../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/BarChart/BarChart.tsx","../src/charts/ComboChart/ComboChart.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/charts/areaChart/AreaChart.tsx","../src/charts/barHorizontalChart/BarHotizontalChart.tsx","../src/charts/bubbleChart/BubbleChart.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/useChartFactory.tsx","../src/components/dashboard/DashBoard.tsx","../src/components/dashboard/useDashboardStyles.ts"],"sourcesContent":["import {\n ChartType,\n TooltipCallbacks,\n TooltipItem,\n TooltipModel,\n TooltipOptions,\n} from 'chart.js';\n\nimport { Theme } from '@fluentui/react-components';\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\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 * useChartUtils — shared theming and chart helpers.\n */\nexport function useChartUtils(theme?: Theme) {\n return useMemo(\n () => ({\n lightenColor,\n getFluentPalette,\n createFluentTooltip,\n createAxisLabelFormatter,\n debounce\n }),\n [theme]\n );\n}\n","// 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 { useChartUtils } from './useChartUtils';\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 } = useChartUtils();\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 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, useChartUtils } from '../../hooks/useChartUtils';\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 } = useChartUtils(\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 {\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 { useChartUtils } from '../../hooks/useChartUtils';\nimport { useGraphGlobalStyles } from '../../graphGlobalStyles/useGraphGlobalStyles';\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 } = useChartUtils(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 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 {\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 { useChartUtils } from '../../hooks/useChartUtils';\nimport { useGraphGlobalStyles } from '../../graphGlobalStyles/useGraphGlobalStyles';\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 } = useChartUtils(\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 { useChartUtils } from '../../hooks/useChartUtils';\nimport { useGraphGlobalStyles } from '../../graphGlobalStyles/useGraphGlobalStyles';\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} = useChartUtils(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 { useChartUtils } from '../../hooks/useChartUtils';\nimport { useGraphGlobalStyles } from '../../graphGlobalStyles/useGraphGlobalStyles';\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 } = useChartUtils(\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 { 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 { useChartUtils } from '../../hooks/useChartUtils';\nimport { useGraphGlobalStyles } from '../../graphGlobalStyles/useGraphGlobalStyles';\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 } = useChartUtils(\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 { useChartUtils } from '../../hooks/useChartUtils';\nimport { useGraphGlobalStyles } from '../../graphGlobalStyles/useGraphGlobalStyles';\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 } = useChartUtils(\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 { useChartUtils } from '../../hooks/useChartUtils';\nimport { useGraphGlobalStyles } from '../../graphGlobalStyles/useGraphGlobalStyles';\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} = useChartUtils(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/useChartUtils';\nimport { useChartUtils } from '../../hooks/useChartUtils';\nimport { useGraphGlobalStyles } from '../../graphGlobalStyles/useGraphGlobalStyles';\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 } = useChartUtils(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, useChartUtils } from '../../hooks/useChartUtils';\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 } = useChartUtils(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, useChartUtils } from '../../hooks/useChartUtils';\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 } = useChartUtils(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 { useChartUtils } from '../../hooks/useChartUtils';\nimport { useGraphGlobalStyles } from '../../graphGlobalStyles/useGraphGlobalStyles';\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 } = useChartUtils(\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 { useChartUtils } from '../../hooks/useChartUtils';\nimport { useGraphGlobalStyles } from '../../graphGlobalStyles/useGraphGlobalStyles';\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 } = useChartUtils(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, useChartUtils } from '../../hooks/useChartUtils';\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 } = useChartUtils(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 { 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\";\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';\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\nexport const useChartFactory = () => {\n return React.useMemo(() => ({\n getChartComponent\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 { useChartFactory } from '../../hooks/useChartFactory';\nimport { useDashboardStyles } from './useDashboardStyles';\nimport { useIndexedDBCache } from '@spteck/m365-hooks';\n\nconst MINIMUM_DASHBOARD_WIDTH = 600;\nconst MAX_ROWS = 4;\nconst DASHBOARD_LAYOUT_CACHE_KEY = 'dashboard-layout-settings';\nconst DASHBOARD_ORDER_CACHE_KEY = 'dashboard-card-order';\nconst CACHE_EXPIRATION_DAYS = 30;\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 const { getChartComponent } = useChartFactory();\n \n // Cache with 30-day expiration for dashboard layout settings\n const { getData, setData } = useIndexedDBCache<Record<string, { spanCols: number; spanRows: number }>>(\n CACHE_EXPIRATION_DAYS * 24 * 60 * 60 * 1000\n );\n\n // Cache for card order\n const { \n getData: getOrderData, \n setData: setOrderData \n } = useIndexedDBCache<string[]>(\n CACHE_EXPIRATION_DAYS * 24 * 60 * 60 * 1000\n );\n\n \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 // Load cached card order and sizes\n const initializeData = async () => {\n try {\n const [cachedSizes, cachedOrder] = await Promise.all([\n getData(DASHBOARD_LAYOUT_CACHE_KEY),\n getOrderData(DASHBOARD_ORDER_CACHE_KEY)\n ]);\n \n // Restore card order if available, otherwise use original order\n let orderedCards = cardCharts;\n if (cachedOrder && cachedOrder.length > 0) {\n // Reorder cards based on cached order, but handle cases where cards might have been added/removed\n const cardMap = new Map(cardCharts.map(card => [card.id, card]));\n const validCachedOrder = cachedOrder.filter(id => cardMap.has(id));\n const missingCards = cardCharts.filter(card => !cachedOrder.includes(card.id));\n \n orderedCards = [\n ...validCachedOrder.map(id => cardMap.get(id)!),\n ...missingCards\n ];\n }\n \n setCardChartContainer(orderedCards);\n \n const initialSizes: Record<\n string,\n { spanCols: number; spanRows: number }\n > = {};\n \n cardCharts.forEach(c => {\n const cachedSize = cachedSizes?.[c.id];\n initialSizes[c.id] = {\n spanCols: cachedSize?.spanCols ?? c.defaultSpan?.spanCols ?? 1,\n spanRows: cachedSize?.spanRows ?? c.defaultSpan?.spanRows ?? 1,\n };\n });\n \n setSizes(initialSizes);\n } catch (error) {\n // Fallback to default values if cache fails\n console.warn('Failed to load dashboard data from cache:', error);\n setCardChartContainer(cardCharts);\n const fallbackSizes: Record<\n string,\n { spanCols: number; spanRows: number }\n > = {};\n cardCharts.forEach(c => {\n fallbackSizes[c.id] = {\n spanCols: c.defaultSpan?.spanCols ?? 1,\n spanRows: c.defaultSpan?.spanRows ?? 1,\n };\n });\n setSizes(fallbackSizes);\n }\n };\n \n initializeData();\n }, [cardCharts, getData, getOrderData]);\n\n // Save sizes to cache whenever they change\n useEffect(() => {\n const saveSizesToCache = async () => {\n try {\n await setData(DASHBOARD_LAYOUT_CACHE_KEY, sizes);\n } catch (error) {\n console.warn('Failed to save dashboard layout to cache:', error);\n }\n };\n\n // Only save if sizes is not empty (avoid saving initial empty state)\n if (Object.keys(sizes).length > 0) {\n saveSizesToCache();\n }\n }, [sizes, setData]);\n\n // Save card order to cache whenever it changes\n useEffect(() => {\n const saveOrderToCache = async () => {\n try {\n const cardOrder = CardChartContainer.map(card => card.id);\n await setOrderData(DASHBOARD_ORDER_CACHE_KEY, cardOrder);\n } catch (error) {\n console.warn('Failed to save dashboard order to cache:', error);\n }\n };\n\n // Only save if CardChartContainer is not empty\n if (CardChartContainer.length > 0) {\n saveOrderToCache();\n }\n }, [CardChartContainer, setOrderData]);\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 const newSizes = {\n spanCols: Math.min(Math.max(span.spanCols, 1), maxZoom),\n spanRows: Math.min(Math.max(span.spanRows, 1), maxSpanRows),\n };\n \n setSizes(prev => ({\n ...prev,\n [id]: newSizes,\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":["lightenColor","hex","amount","test","startsWith","slice","r","parseInt","g","b","Math","min","floor","toHex","v","toString","padStart","getFluentPalette","_theme","createFluentTooltip","theme","fontFamily","fontFamilyBase","fontSize","fontSizeBase200","replace","enabled","displayColors","boxWidth","boxHeight","boxPadding","backgroundColor","colorNeutralBackground1","borderColor","colorNeutralStroke2","borderWidth","cornerRadius","padding","titleColor","colorNeutralForeground1","bodyColor","colorNeutralForeground2","titleFont","family","size","bodyFont","callbacks","title","context","_context$0$label","_context$","label","item","datasetLabel","dataset","raw","x","y","Array","isArray","length","beforeTitle","afterTitle","beforeBody","afterBody","beforeLabel","afterLabel","labelColor","labelTextColor","footer","beforeFooter","afterFooter","labelPointStyle","pointStyle","rotation","radius","createAxisLabelFormatter","_ref","maxLength","_ref$maxLength","_ref$suffix","suffix","_ref$prefix","prefix","value","this","getLabelForValue","String","trimmed","debounce","fn","delay","timer","args","_len","_key","arguments","clearTimeout","setTimeout","apply","_this","useChartUtils","useMemo","LegendButton","isVisible","color","_ref$style","style","React","Tooltip","content","relationship","Button","ref","buttonRef","shape","appearance","onClick","_extends","tokens","width","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","includes","key","Menu","MenuTrigger","disableButtonEnhancement","MenuButton","MenuPopover","minWidth","maxWidth","MenuList","MenuItem","useResponsiveLegend","items","useRef","_useState","useState","maxVisible","setMaxVisible","useEffect","measure","containerWidth","_containerRef$current","_containerRef$current2","current","offsetWidth","count","BUTTON_WIDTH","debouncedMeasure","observer","ResizeObserver","observe","disconnect","RenderLegend","data","visibleSeries","seriesColors","toggleSeries","_useResponsiveLegend","d","useGraphGlobalStyles","chartWithLegend","chartArea","flexGrow","minHeight","_templateObject","_taggedTemplateLiteralLoose","legendArea","_templateObject2","BarChart","getPrimary","getSecondary","_ref$showDatalabels","showDatalabels","_ref$stacked","stacked","_data$","setVisibleSeries","_useChartUtils","reduce","acc","series","idx","base","allCategories","categorySet","Set","forEach","datum","add","from","chartData","labels","datasets","filter","cat","found","find","yAxisID","type","_useMemo","gridColor","options","responsive","maintainAspectRatio","plugins","text","font","weight","fontWeightSemibold","top","bottom","datalabels","legend","tooltip","scales","ticks","callback","grid","position","y1","drawOnChartArea","Bar","prev","next","concat","ComboChart","_ref$showDataLabels","showDataLabels","_ref$theme","webLightTheme","set","sortedSeries","sort","a","_series$yAxisID","fill","tension","pointRadius","order","Chart","ChartJS","register","CategoryScale","LinearScale","BarElement","Legend","ChartDataLabels","Title","LineElement","PointElement","BusinessReportIcon","_ref$height","_ref$width","viewBox","xmlns","id","colorNeutralStroke1","colorNeutralForeground3","opacity","colorBrandBackground","points","NoDashboards","Text","useRenderLabelStyles","makeStyles","labelContainer","shorthands","iconStyles","RenderLabel","icon","isRequired","Icon","colorBrandForeground1","colorPaletteRedForeground1","SelectZoom","onChange","defaultValues","values","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","AreaChart","match","Line","BarHorizontalChart","indexAxis","BubbleChart","getRadius","hoverBorderWidth","_data$2","Bubble","Filler","RenderValueLegend","entries","entry","DoughnutChart","getLabel","getValue","hiddenLabels","setHiddenLabels","valueMap","Map","get","allLabels","keys","palette","colors","i","_useMemo2","filteredLabels","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","max","undefined","ToggleButton","p","RadialLinearScale","chartProps","chart","name","getChartComponent","fuiTheme","_d$radius","_series$type","secondaryAxisId","_d$min","_d$max","_datum$value","_datum$value2","Date","getTime","_d$value","_d$value2","Error","useChartFactory","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","_useIndexedDBCache","useIndexedDBCache","CACHE_EXPIRATION_DAYS","getData","setData","_useIndexedDBCache2","getOrderData","setOrderData","CardChartContainer","setCardChartContainer","sizes","setSizes","dragItem","dragOverItem","_ref2","_asyncToGenerator","_regenerator","_callee","_yield$Promise$all","cachedSizes","cachedOrder","orderedCards","cardMap","validCachedOrder","missingCards","initialSizes","fallbackSizes","w","_context","n","Promise","all","card","has","c","cachedSize","_ref3","_cachedSize$spanCols","_c$defaultSpan","defaultSpan","_ref4","_cachedSize$spanRows","_c$defaultSpan2","console","warn","_c$defaultSpan$spanCo","_c$defaultSpan3","_c$defaultSpan$spanRo","_c$defaultSpan4","initializeData","saveSizesToCache","_ref5","_callee2","_context2","Object","saveOrderToCache","_ref6","_callee3","cardOrder","_context3","reset","showZoom","minCardWidth","gridGap","containerPadding","innerWidth","columns","maxZoom","handleSort","copy","_copy$splice","splice","handleZoomSelect","span","newSizes","_extends2","defaultColsAndRowSpanBasedOnNumberColumns","_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/hooks/useChartUtils.tsx","../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/BarChart/BarChart.tsx","../src/charts/ComboChart/ComboChart.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/charts/areaChart/AreaChart.tsx","../src/charts/barHorizontalChart/BarHotizontalChart.tsx","../src/charts/bubbleChart/BubbleChart.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/useChartFactory.tsx","../src/hooks/useIndexedDBCache.ts","../src/components/dashboard/DashBoard.tsx","../src/components/dashboard/useDashboardStyles.ts"],"sourcesContent":["import {\n ChartType,\n TooltipCallbacks,\n TooltipItem,\n TooltipModel,\n TooltipOptions,\n} from 'chart.js';\n\nimport { Theme } from '@fluentui/react-components';\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\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 * useChartUtils — shared theming and chart helpers.\n */\nexport function useChartUtils(theme?: Theme) {\n return useMemo(\n () => ({\n lightenColor,\n getFluentPalette,\n createFluentTooltip,\n createAxisLabelFormatter,\n debounce\n }),\n [theme]\n );\n}\n","// 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 { useChartUtils } from './useChartUtils';\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 } = useChartUtils();\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 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, useChartUtils } from '../../hooks/useChartUtils';\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 } = useChartUtils(\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 {\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 { useChartUtils } from '../../hooks/useChartUtils';\nimport { useGraphGlobalStyles } from '../../graphGlobalStyles/useGraphGlobalStyles';\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 } = useChartUtils(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 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 { 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 zoomContainer: 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 zoomContainer: css({\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n gap: '6px',\n width: '100%',\n boxSizing: 'border-box',\n \n padding: '8px 0px',\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 className={styles.zoomContainer} \n >\n <RenderLabel\n label={`Span (${values.spanCols} × ${values.spanRows})`}\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 {\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 { useChartUtils } from '../../hooks/useChartUtils';\nimport { useGraphGlobalStyles } from '../../graphGlobalStyles/useGraphGlobalStyles';\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 } = useChartUtils(\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 { useChartUtils } from '../../hooks/useChartUtils';\nimport { useGraphGlobalStyles } from '../../graphGlobalStyles/useGraphGlobalStyles';\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} = useChartUtils(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 { useChartUtils } from '../../hooks/useChartUtils';\nimport { useGraphGlobalStyles } from '../../graphGlobalStyles/useGraphGlobalStyles';\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 } = useChartUtils(\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 { 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 { useChartUtils } from '../../hooks/useChartUtils';\nimport { useGraphGlobalStyles } from '../../graphGlobalStyles/useGraphGlobalStyles';\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 } = useChartUtils(\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 { useChartUtils } from '../../hooks/useChartUtils';\nimport { useGraphGlobalStyles } from '../../graphGlobalStyles/useGraphGlobalStyles';\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 } = useChartUtils(\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 { useChartUtils } from '../../hooks/useChartUtils';\nimport { useGraphGlobalStyles } from '../../graphGlobalStyles/useGraphGlobalStyles';\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} = useChartUtils(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/useChartUtils';\nimport { useChartUtils } from '../../hooks/useChartUtils';\nimport { useGraphGlobalStyles } from '../../graphGlobalStyles/useGraphGlobalStyles';\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 } = useChartUtils(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, useChartUtils } from '../../hooks/useChartUtils';\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 } = useChartUtils(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, useChartUtils } from '../../hooks/useChartUtils';\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 } = useChartUtils(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 { useChartUtils } from '../../hooks/useChartUtils';\nimport { useGraphGlobalStyles } from '../../graphGlobalStyles/useGraphGlobalStyles';\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 } = useChartUtils(\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 { useChartUtils } from '../../hooks/useChartUtils';\nimport { useGraphGlobalStyles } from '../../graphGlobalStyles/useGraphGlobalStyles';\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 } = useChartUtils(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, useChartUtils } from '../../hooks/useChartUtils';\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 } = useChartUtils(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 { 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\";\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';\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\nexport const useChartFactory = () => {\n return React.useMemo(() => ({\n getChartComponent\n }), []);\n};","import {\n DBSchema,\n openDB,\n} from 'idb';\n\nimport { useEffect } from 'react';\n\nexport interface CacheData<T> {\n data: T;\n timestamp: number;\n}\n\ninterface CacheDB<T> extends DBSchema {\n cache: {\n key: string;\n value: CacheData<T>;\n };\n}\n\ninterface UseIndexedDBCacheReturn<T> {\n getData: (key: string) => Promise<T | undefined>;\n setData: (key: string, data: T) => Promise<void>;\n deleteData: (key: string) => Promise<void>;\n clearAllCache: () => Promise<void>;\n}\n\nconst CACHE: string = \"application-cache\";\n\nconst openDatabase = async <T>() => {\n return openDB<CacheDB<T>>('app-cache-db', 1, {\n upgrade(db) {\n db.createObjectStore(CACHE as never);\n },\n });\n};\n\nconst getCachedData = async <T>(key: string): Promise<T | undefined> => {\n const db = await openDatabase<T>();\n const cached = await db.get((CACHE as never), key);\n return cached ? cached.data : undefined;\n};\n\nconst setCachedData = async <T>(key: string, data: T): Promise<void> => {\n const db = await openDatabase<T>();\n await db.put(CACHE as never, { data, timestamp: Date.now() }, key);\n};\n\nconst deleteCachedData = async (key: string): Promise<void> => {\n const db = await openDatabase<any>();\n await db.delete(CACHE as never, key);\n};\n\nconst clearCache = async (): Promise<void> => {\n const db = await openDatabase<any>();\n await db.clear(CACHE as never);\n};\n\nconst clearExpiredCache = async (maxAge: number): Promise<void> => {\n const db = await openDatabase<any>();\n const allKeys = await db.getAllKeys(CACHE as never);\n const now = Date.now();\n\n for (const key of allKeys) {\n const cached = await db.get(CACHE as never, key as string);\n if (cached && now - cached.timestamp > maxAge) {\n await db.delete(CACHE as never, key);\n }\n }\n};\nconst DEFAULT_MAX_AGE = 24 * 60 * 60 * 1000; // 1 day in milliseconds\n/**\n * Custom hook to manage IndexedDB cache with a specified maximum age.\n *\n * @template T - The type of data to be cached.\n * @param {number} [maxAge=DEFAULT_MAX_AGE] - The maximum age (in milliseconds) for cached data before it is considered expired.\n * @returns {UseIndexedDBCacheReturn<T>} An object containing methods to interact with the cache.\n *\n * @example\n * const { getData, setData, deleteData, clearAllCache } = useIndexedDBCache<MyDataType>(3600000);\n *\n * @function\n * @name useIndexedDBCache\n * @memberof hooks\n * @inner\n *\n * @typedef {Object} UseIndexedDBCacheReturn<T>\n * @property {function(string): Promise<T | undefined>} getData - Retrieves cached data by key.\n * @property {function(string, T): Promise<void>} setData - Caches data with a specified key.\n * @property {function(string): Promise<void>} deleteData - Deletes cached data by key.\n * @property {function(): Promise<void>} clearAllCache - Clears all cached data.\n */\nexport const useIndexedDBCache = <T>(maxAge: number = DEFAULT_MAX_AGE): UseIndexedDBCacheReturn<T> => {\n useEffect(() => {\n // Clear expired cache on component mount\n (async () => {\n await clearExpiredCache(maxAge);\n })();\n }, [maxAge]);\n\n const getData = async (key: string): Promise<T | undefined> => {\n return await getCachedData<T>(key);\n };\n\n const setData = async (key: string, data: T): Promise<void> => {\n await setCachedData<T>(key, data);\n };\n\n const deleteData = async (key: string): Promise<void> => {\n await deleteCachedData(key);\n };\n\n const clearAllCache = async (): Promise<void> => {\n await clearCache();\n };\n\n return { getData, setData, deleteData, clearAllCache };\n};\n\nexport default useIndexedDBCache;\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 { useChartFactory } from '../../hooks/useChartFactory';\nimport { useDashboardStyles } from './useDashboardStyles';\nimport { useIndexedDBCache } from '../../hooks/useIndexedDBCache';\n\nconst MINIMUM_DASHBOARD_WIDTH = 600;\nconst MAX_ROWS = 4;\nconst DASHBOARD_LAYOUT_CACHE_KEY = 'dashboard-layout-settings';\nconst DASHBOARD_ORDER_CACHE_KEY = 'dashboard-card-order';\nconst CACHE_EXPIRATION_DAYS = 30;\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 const { getChartComponent } = useChartFactory();\n \n // Cache with 30-day expiration for dashboard layout settings\n const { getData, setData } = useIndexedDBCache<Record<string, { spanCols: number; spanRows: number }>>(\n CACHE_EXPIRATION_DAYS * 24 * 60 * 60 * 1000\n );\n\n // Cache for card order\n const { \n getData: getOrderData, \n setData: setOrderData \n } = useIndexedDBCache<string[]>(\n CACHE_EXPIRATION_DAYS * 24 * 60 * 60 * 1000\n );\n\n \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 // Load cached card order and sizes\n const initializeData = async () => {\n try {\n const [cachedSizes, cachedOrder] = await Promise.all([\n getData(DASHBOARD_LAYOUT_CACHE_KEY),\n getOrderData(DASHBOARD_ORDER_CACHE_KEY)\n ]);\n \n // Restore card order if available, otherwise use original order\n let orderedCards = cardCharts;\n if (cachedOrder && cachedOrder.length > 0) {\n // Reorder cards based on cached order, but handle cases where cards might have been added/removed\n const cardMap = new Map(cardCharts.map(card => [card.id, card]));\n const validCachedOrder = cachedOrder.filter(id => cardMap.has(id));\n const missingCards = cardCharts.filter(card => !cachedOrder.includes(card.id));\n \n orderedCards = [\n ...validCachedOrder.map(id => cardMap.get(id)!),\n ...missingCards\n ];\n }\n \n setCardChartContainer(orderedCards);\n \n const initialSizes: Record<\n string,\n { spanCols: number; spanRows: number }\n > = {};\n \n cardCharts.forEach(c => {\n const cachedSize = cachedSizes?.[c.id];\n initialSizes[c.id] = {\n spanCols: cachedSize?.spanCols ?? c.defaultSpan?.spanCols ?? 1,\n spanRows: cachedSize?.spanRows ?? c.defaultSpan?.spanRows ?? 1,\n };\n });\n \n setSizes(initialSizes);\n } catch (error) {\n // Fallback to default values if cache fails\n console.warn('Failed to load dashboard data from cache:', error);\n setCardChartContainer(cardCharts);\n const fallbackSizes: Record<\n string,\n { spanCols: number; spanRows: number }\n > = {};\n cardCharts.forEach(c => {\n fallbackSizes[c.id] = {\n spanCols: c.defaultSpan?.spanCols ?? 1,\n spanRows: c.defaultSpan?.spanRows ?? 1,\n };\n });\n setSizes(fallbackSizes);\n }\n };\n \n initializeData();\n }, [cardCharts]); // Only depend on cardCharts - getData/getOrderData are stable\n\n // Save sizes to cache whenever they change\n useEffect(() => {\n const saveSizesToCache = async () => {\n try {\n await setData(DASHBOARD_LAYOUT_CACHE_KEY, sizes);\n } catch (error) {\n console.warn('Failed to save dashboard layout to cache:', error);\n }\n };\n\n // Only save if sizes is not empty (avoid saving initial empty state)\n if (Object.keys(sizes).length > 0) {\n saveSizesToCache();\n }\n }, [sizes]); // Only depend on sizes - setData is stable\n\n // Save card order to cache whenever it changes\n useEffect(() => {\n const saveOrderToCache = async () => {\n try {\n const cardOrder = CardChartContainer.map(card => card.id);\n await setOrderData(DASHBOARD_ORDER_CACHE_KEY, cardOrder);\n } catch (error) {\n console.warn('Failed to save dashboard order to cache:', error);\n }\n };\n\n // Only save if CardChartContainer is not empty\n if (CardChartContainer.length > 0) {\n saveOrderToCache();\n }\n }, [CardChartContainer]); // Only depend on CardChartContainer - setOrderData is stable\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 const newSizes = {\n spanCols: Math.min(Math.max(span.spanCols, 1), maxZoom),\n spanRows: Math.min(Math.max(span.spanRows, 1), maxSpanRows),\n };\n \n setSizes(prev => ({\n ...prev,\n [id]: newSizes,\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":["lightenColor","hex","amount","test","startsWith","slice","r","parseInt","g","b","Math","min","floor","toHex","v","toString","padStart","getFluentPalette","_theme","createFluentTooltip","theme","fontFamily","fontFamilyBase","fontSize","fontSizeBase200","replace","enabled","displayColors","boxWidth","boxHeight","boxPadding","backgroundColor","colorNeutralBackground1","borderColor","colorNeutralStroke2","borderWidth","cornerRadius","padding","titleColor","colorNeutralForeground1","bodyColor","colorNeutralForeground2","titleFont","family","size","bodyFont","callbacks","title","context","_context$0$label","_context$","label","item","datasetLabel","dataset","raw","x","y","Array","isArray","length","beforeTitle","afterTitle","beforeBody","afterBody","beforeLabel","afterLabel","labelColor","labelTextColor","footer","beforeFooter","afterFooter","labelPointStyle","pointStyle","rotation","radius","createAxisLabelFormatter","_ref","maxLength","_ref$maxLength","_ref$suffix","suffix","_ref$prefix","prefix","value","this","getLabelForValue","String","trimmed","debounce","fn","delay","timer","args","_len","_key","arguments","clearTimeout","setTimeout","apply","_this","useChartUtils","useMemo","LegendButton","isVisible","color","_ref$style","style","React","Tooltip","content","relationship","Button","ref","buttonRef","shape","appearance","onClick","_extends","tokens","width","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","includes","key","Menu","MenuTrigger","disableButtonEnhancement","MenuButton","MenuPopover","minWidth","maxWidth","MenuList","MenuItem","useResponsiveLegend","items","useRef","_useState","useState","maxVisible","setMaxVisible","useEffect","measure","containerWidth","_containerRef$current","_containerRef$current2","current","offsetWidth","count","BUTTON_WIDTH","debouncedMeasure","observer","ResizeObserver","observe","disconnect","RenderLegend","data","visibleSeries","seriesColors","toggleSeries","_useResponsiveLegend","d","useGraphGlobalStyles","chartWithLegend","chartArea","flexGrow","minHeight","_templateObject","_taggedTemplateLiteralLoose","legendArea","_templateObject2","BarChart","getPrimary","getSecondary","_ref$showDatalabels","showDatalabels","_ref$stacked","stacked","_data$","setVisibleSeries","_useChartUtils","reduce","acc","series","idx","base","allCategories","categorySet","Set","forEach","datum","add","from","chartData","labels","datasets","filter","cat","found","find","yAxisID","type","_useMemo","gridColor","options","responsive","maintainAspectRatio","plugins","text","font","weight","fontWeightSemibold","top","bottom","datalabels","legend","tooltip","scales","ticks","callback","grid","position","y1","drawOnChartArea","Bar","prev","next","concat","ComboChart","_ref$showDataLabels","showDataLabels","_ref$theme","webLightTheme","set","sortedSeries","sort","a","_series$yAxisID","fill","tension","pointRadius","order","Chart","ChartJS","register","CategoryScale","LinearScale","BarElement","Legend","ChartDataLabels","Title","LineElement","PointElement","BusinessReportIcon","_ref$height","_ref$width","viewBox","xmlns","id","colorNeutralStroke1","colorNeutralForeground3","opacity","colorBrandBackground","points","NoDashboards","Text","useRenderLabelStyles","makeStyles","labelContainer","shorthands","iconStyles","RenderLabel","icon","isRequired","Icon","colorBrandForeground1","colorPaletteRedForeground1","SelectZoom","onChange","defaultValues","values","maxCols","maxRows","Settings","bundleIcon","Settings20Filled","Settings20Regular","gridContainer","cell","hoveredCell","_templateObject3","colorNeutralBackground1Hover","selectedCell","_templateObject4","colorNeutralBackground1Selected","menuPopover","_templateObject5","bottomText","_templateObject6","zoomContainer","_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","AreaChart","match","Line","BarHorizontalChart","indexAxis","BubbleChart","getRadius","hoverBorderWidth","_data$2","Bubble","Filler","RenderValueLegend","entries","entry","DoughnutChart","getLabel","getValue","hiddenLabels","setHiddenLabels","valueMap","Map","get","allLabels","keys","palette","colors","i","_useMemo2","filteredLabels","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","max","undefined","ToggleButton","p","RadialLinearScale","chartProps","chart","name","getChartComponent","fuiTheme","_d$radius","_series$type","secondaryAxisId","_d$min","_d$max","_datum$value","_datum$value2","Date","getTime","_d$value","_d$value2","Error","useChartFactory","CACHE","openDatabase","_asyncToGenerator","_regenerator","_callee","w","_context","n","openDB","upgrade","db","createObjectStore","getCachedData","_ref2","_callee2","cached","_context2","_x","setCachedData","_ref3","_callee3","_context3","put","timestamp","now","_x2","_x3","deleteCachedData","_ref4","_callee4","_context4","_x4","clearCache","_ref5","_callee5","_context5","clear","clearExpiredCache","_ref6","_callee6","maxAge","allKeys","_iterator","_step","_context6","getAllKeys","_createForOfIteratorHelperLoose","done","_x5","useIndexedDBCache","_callee7","_context7","getData","_ref8","_callee8","_context8","_x6","setData","_ref9","_callee9","_context9","_x7","_x8","deleteData","_ref0","_callee0","_context0","_x9","clearAllCache","_ref1","_callee1","_context1","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","_useIndexedDBCache","CACHE_EXPIRATION_DAYS","_useIndexedDBCache2","getOrderData","setOrderData","CardChartContainer","setCardChartContainer","sizes","setSizes","dragItem","dragOverItem","_yield$Promise$all","cachedSizes","cachedOrder","orderedCards","cardMap","validCachedOrder","missingCards","initialSizes","fallbackSizes","Promise","all","card","has","c","cachedSize","_cachedSize$spanCols","_c$defaultSpan","defaultSpan","_cachedSize$spanRows","_c$defaultSpan2","console","warn","_c$defaultSpan$spanCo","_c$defaultSpan3","_c$defaultSpan$spanRo","_c$defaultSpan4","initializeData","saveSizesToCache","Object","saveOrderToCache","cardOrder","reset","showZoom","minCardWidth","gridGap","containerPadding","innerWidth","columns","maxZoom","handleSort","copy","_copy$splice","splice","handleZoomSelect","span","newSizes","_extends2","defaultColsAndRowSpanBasedOnNumberColumns","_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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"}