@nivo/annotations
Version:
87 lines • 2.74 kB
TypeScript
import { Theme } from '@nivo/theming';
import { ReactElement } from 'react';
type PartialShallow<T> = {
[P in keyof T]?: T[P] extends object ? object : T[P];
};
type PropertyName = string | number | symbol;
type IterateeShorthand<T> = PropertyName | [PropertyName, any] | PartialShallow<T>;
type ListIterator<T, TResult> = (value: T, index: number, collection: ArrayLike<T>) => TResult;
type ListIterateeCustom<T, TResult> = ListIterator<T, TResult> | IterateeShorthand<T>;
export type RelativeOrAbsolutePosition = number | {
abs: number;
};
export type AnnotationPositionGetter<Datum> = (datum: Datum) => {
x: number;
y: number;
};
export type AnnotationDimensionsGetter<Datum> = (datum: Datum) => {
size: number;
width: number;
height: number;
};
export type NoteComponent<Datum> = (props: {
datum: Datum;
x: number;
y: number;
}) => JSX.Element;
export type NoteSvg<Datum> = string | ReactElement | NoteComponent<Datum>;
export type NoteCanvasRenderer<Datum> = (ctx: CanvasRenderingContext2D, props: {
datum: Datum;
x: number;
y: number;
theme: Theme;
}) => void;
export type NoteCanvas<Datum> = string | NoteCanvasRenderer<Datum>;
export type Note<Datum> = NoteSvg<Datum> | NoteCanvas<Datum>;
export interface BaseAnnotationSpec<Datum> {
x?: number;
y?: number;
note: Note<Datum>;
noteX: RelativeOrAbsolutePosition;
noteY: RelativeOrAbsolutePosition;
noteWidth?: number;
noteTextOffset?: number;
}
export type CircleAnnotationSpec<Datum> = BaseAnnotationSpec<Datum> & {
type: 'circle';
size?: number;
offset?: number;
height?: never;
width?: never;
};
export type DotAnnotationSpec<Datum> = BaseAnnotationSpec<Datum> & {
type: 'dot';
size: number;
offset?: number;
height?: never;
width?: never;
};
export type RectAnnotationSpec<Datum> = BaseAnnotationSpec<Datum> & {
type: 'rect';
width?: number;
height?: number;
offset?: number;
size?: never;
borderRadius?: number;
};
export type AnnotationSpec<Datum> = CircleAnnotationSpec<Datum> | DotAnnotationSpec<Datum> | RectAnnotationSpec<Datum>;
export type AnnotationType = AnnotationSpec<unknown>['type'];
export type AnnotationMatcher<Datum> = AnnotationSpec<Datum> & {
match: ListIterateeCustom<Datum, boolean>;
offset?: number;
};
export type BoundAnnotation<Datum> = Required<AnnotationSpec<Datum>> & {
x: number;
y: number;
datum: Datum;
};
export interface AnnotationInstructions {
points: [number, number][];
text: [number, number];
angle: number;
}
export type ComputedAnnotation<Datum> = BoundAnnotation<Datum> & {
computed: AnnotationInstructions;
};
export {};
//# sourceMappingURL=types.d.ts.map