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 (
{children}
); }; 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 ( } /> ); }, }; }