import { cn } from '@/utils/cn';
import { createContext, useContext as useBaseContext } from 'react';
import { Tooltip as RechartsTooltip, type TooltipProps } from 'recharts';
export const ChartTooltipContainer = ({
children,
className,
}: { children: React.ReactNode; className?: string }) => {
return (
{children}
);
};
export const ChartTooltipHeader = ({
children,
}: { children: React.ReactNode }) => {
return {children}
;
};
export const ChartTooltipItem = ({
children,
color,
className,
innerClassName,
}: {
children: React.ReactNode;
color: string;
className?: string;
innerClassName?: string;
}) => {
return (
);
};
export function createChartTooltip<
PropsFromTooltip,
PropsFromContext extends Record,
>(
Tooltip: React.ComponentType<
{
context: PropsFromContext;
data: PropsFromTooltip[];
} & TooltipProps
>,
) {
const context = createContext(null);
const useContext = () => {
const value = useBaseContext(context);
if (!value) {
throw new Error('ChartTooltip context not found');
}
return value;
};
const InnerTooltip = (tooltip: TooltipProps) => {
const context = useContext();
const data = tooltip.payload?.map((p) => p.payload) ?? [];
if (!data || !tooltip.active) {
return null;
}
return (
);
};
return {
TooltipProvider: ({
children,
...value
}: {
children: React.ReactNode;
} & PropsFromContext) => {
return (
{children}
);
},
Tooltip: (props: TooltipProps) => {
return (
} />
);
},
};
}