@nivo/heatmap
Version:
142 lines • 6.16 kB
TypeScript
import { AriaAttributes, MouseEvent, FunctionComponent } from 'react';
import { AnimatedProps } from '@react-spring/web';
import { Box, Dimensions, MotionProps, PropertyAccessor, ValueFormat } from '@nivo/core';
import { PartialTheme, Theme } from '@nivo/theming';
import { AxisProps, CanvasAxisProps } from '@nivo/axes';
import { InheritedColorConfig, ContinuousColorScaleConfig } from '@nivo/colors';
import { AnchoredContinuousColorsLegendProps } from '@nivo/legends';
import { AnnotationMatcher } from '@nivo/annotations';
export interface HeatMapDatum {
x: string | number;
y?: number | null | undefined;
}
export interface DefaultHeatMapDatum {
x: string;
y?: number | null | undefined;
}
export type HeatMapSerie<Datum extends HeatMapDatum, ExtraProps extends object> = {
id: string;
data: Datum[];
} & ExtraProps;
export interface ComputedCell<Datum extends HeatMapDatum> {
id: string;
serieId: string;
value: number | null;
formattedValue: string | null;
data: Datum;
x: number;
y: number;
width: number;
height: number;
color: string;
opacity: number;
borderColor: string;
label: string;
labelTextColor: string;
}
export interface CellAnimatedProps {
x: number;
y: number;
width: number;
height: number;
scale: number;
color: string;
opacity: number;
borderColor: string;
labelTextColor: string;
}
export interface HeatMapDataProps<Datum extends HeatMapDatum, ExtraProps extends object> {
data: HeatMapSerie<Datum, ExtraProps>[];
}
export interface SizeVariationConfig {
values?: [min: number, max: number];
sizes: [min: number, max: number];
}
export type LayerId = 'grid' | 'axes' | 'cells' | 'legends' | 'annotations';
export interface CustomLayerProps<Datum extends HeatMapDatum> {
cells: ComputedCell<Datum>[];
activeCell: ComputedCell<Datum> | null;
setActiveCell: (cell: ComputedCell<Datum> | null) => void;
}
export type CustomLayer<Datum extends HeatMapDatum> = FunctionComponent<CustomLayerProps<Datum>>;
export type CustomCanvasLayer<Datum extends HeatMapDatum> = (ctx: CanvasRenderingContext2D, props: CustomLayerProps<Datum>) => void;
export interface TooltipProps<Datum extends HeatMapDatum> {
cell: ComputedCell<Datum>;
}
export type TooltipComponent<Datum extends HeatMapDatum> = FunctionComponent<TooltipProps<Datum>>;
export interface CellComponentProps<Datum extends HeatMapDatum> {
cell: ComputedCell<Datum>;
borderWidth: number;
borderRadius: number;
animatedProps: AnimatedProps<CellAnimatedProps>;
onMouseEnter?: (cell: ComputedCell<Datum>) => (event: MouseEvent) => void;
onMouseMove?: (cell: ComputedCell<Datum>) => (event: MouseEvent) => void;
onMouseLeave?: (cell: ComputedCell<Datum>) => (event: MouseEvent) => void;
onClick?: (cell: ComputedCell<Datum>) => (event: MouseEvent) => void;
enableLabels: boolean;
}
export type CellComponent<Datum extends HeatMapDatum> = FunctionComponent<CellComponentProps<Datum>>;
export interface CellCanvasRendererProps<Datum extends HeatMapDatum> {
cell: ComputedCell<Datum>;
borderWidth: number;
enableLabels: boolean;
theme: Theme;
}
export type CellCanvasRenderer<Datum extends HeatMapDatum> = (ctx: CanvasRenderingContext2D, props: CellCanvasRendererProps<Datum>) => void;
export type CellShape = 'rect' | 'circle';
export type HeatMapCommonProps<Datum extends HeatMapDatum> = {
valueFormat: ValueFormat<number>;
margin: Box;
forceSquare: boolean;
sizeVariation: false | SizeVariationConfig;
xInnerPadding: number;
xOuterPadding: number;
yInnerPadding: number;
yOuterPadding: number;
opacity: number;
activeOpacity: number;
inactiveOpacity: number;
borderWidth: number;
borderColor: InheritedColorConfig<Omit<ComputedCell<Datum>, 'borderColor'>>;
enableGridX: boolean;
enableGridY: boolean;
theme: PartialTheme;
colors: ContinuousColorScaleConfig | ((cell: Omit<ComputedCell<Datum>, 'color' | 'opacity' | 'borderColor' | 'labelTextColor'>) => string);
emptyColor: string;
enableLabels: boolean;
label: PropertyAccessor<Omit<ComputedCell<Datum>, 'label' | 'color' | 'opacity' | 'borderColor' | 'labelTextColor'>, string>;
labelTextColor: InheritedColorConfig<Omit<ComputedCell<Datum>, 'labelTextColor'>>;
legends: Omit<AnchoredContinuousColorsLegendProps, 'scale' | 'containerWidth' | 'containerHeight'>[];
annotations: AnnotationMatcher<ComputedCell<Datum>>[];
isInteractive: boolean;
hoverTarget: 'cell' | 'row' | 'column' | 'rowColumn';
tooltip: TooltipComponent<Datum>;
onClick: (cell: ComputedCell<Datum>, event: MouseEvent) => void;
renderWrapper: boolean;
role: string;
ariaLabel: AriaAttributes['aria-label'];
ariaLabelledBy: AriaAttributes['aria-labelledby'];
ariaDescribedBy: AriaAttributes['aria-describedby'];
} & Required<MotionProps>;
export type HeatMapSvgProps<Datum extends HeatMapDatum, ExtraProps extends object> = Partial<HeatMapCommonProps<Datum>> & HeatMapDataProps<Datum, ExtraProps> & Dimensions & Partial<{
axisTop: AxisProps | null;
axisRight: AxisProps | null;
axisBottom: AxisProps | null;
axisLeft: AxisProps | null;
borderRadius: number;
layers: (LayerId | CustomLayer<Datum>)[];
cellComponent: CellShape | CellComponent<Datum>;
onMouseEnter: (cell: ComputedCell<Datum>, event: MouseEvent) => void;
onMouseMove: (cell: ComputedCell<Datum>, event: MouseEvent) => void;
onMouseLeave: (cell: ComputedCell<Datum>, event: MouseEvent) => void;
}>;
export type HeatMapCanvasProps<Datum extends HeatMapDatum, ExtraProps extends object> = Partial<HeatMapCommonProps<Datum>> & HeatMapDataProps<Datum, ExtraProps> & Dimensions & Partial<{
axisTop: CanvasAxisProps<Datum['x']> | null;
axisRight: CanvasAxisProps<string> | null;
axisBottom: CanvasAxisProps<Datum['x']> | null;
axisLeft: CanvasAxisProps<string> | null;
layers: (LayerId | CustomCanvasLayer<Datum>)[];
renderCell: CellShape | CellCanvasRenderer<Datum>;
pixelRatio: number;
}>;
//# sourceMappingURL=types.d.ts.map