import { IBarControllerDatasetOptions, ILineControllerDatasetOptions, ILineControllerChartOptions, IScatterDataPoint, IScatterControllerDatasetOptions, IScatterControllerChartOptions, IBubbleControllerDatasetOptions, IBubbleDataPoint, IDoughnutControllerChartOptions, IDoughnutControllerDatasetOptions, IDoughnutDataPoint, IPieControllerChartOptions, IPieControllerDatasetOptions, IPieDataPoint, IControllerDatasetOptions, IBarControllerChartOptions, IPolarAreaControllerChartOptions, IPolarAreaControllerDatasetOptions, IRadarControllerChartOptions, IRadarControllerDatasetOptions, } from './controllers'; import { ICoreChartOptions } from './core/interfaces'; import { IElementChartOptions } from './elements'; import { ITooltipChartOptions, IFillerControllerDatasetOptions, ILegendChartOptions, ITitleChartOptions, } from './plugins'; import { IChartAnimationOptions, IParsingOptions, IPlugin } from './core'; import { IScaleChartOptions } from './scales'; export type DeepPartial = T extends {} ? { [K in keyof T]?: DeepPartial; } : T; export enum ChartTypeEnum { bar = 'bar', bubble = 'bubble', doughnut = 'doughnut', line = 'line', pie = 'pie', polarArea = 'polarArea', radar = 'radar', scatter = 'scatter', } export type IChartType = keyof typeof ChartTypeEnum; export interface IChartDatasetProperties { type?: TYPE; data: DATA; } export type IChartDatasetBase = DeepPartial< IControllerDatasetOptions & IParsingOptions & O > & IChartDatasetProperties; export type IBarControllerDataset = IChartDatasetBase< 'bar', DATA, IBarControllerDatasetOptions >; export type ILineControllerDataset = IChartDatasetBase< 'line', DATA, ILineControllerDatasetOptions & IFillerControllerDatasetOptions >; export type IScatterControllerDataset = IChartDatasetBase< 'scatter', DATA, IScatterControllerDatasetOptions >; export type IBubbleControllerDataset = IChartDatasetBase< 'bubble', DATA, IBubbleControllerDatasetOptions >; export type IPieControllerDataset = IChartDatasetBase< 'pie', DATA, IPieControllerDatasetOptions >; export type IDoughnutControllerDataset = IChartDatasetBase< 'doughnut', DATA, IDoughnutControllerDatasetOptions >; export type IPolarAreaControllerDataset = IChartDatasetBase< 'polarArea', DATA, IPolarAreaControllerDatasetOptions >; export type IRadarControllerDataset = IChartDatasetBase< 'radar', DATA, IRadarControllerDatasetOptions >; export interface IChartDatasetRegistry { bar: IBarControllerDataset; line: ILineControllerDataset; scatter: IScatterControllerDataset; bubble: IBubbleControllerDataset; pie: IPieControllerDataset; doughnut: IDoughnutControllerDataset; polarArea: IPolarAreaControllerDataset; radar: IRadarControllerDataset; } export type IChartDataset = IChartDatasetRegistry[keyof IChartDatasetRegistry] export interface IChartData< TYPE extends IChartType = IChartType, DATA extends unknown[] = unknown[], LABEL = string > { labels: LABEL[]; // IChartDatasetProperties is repeated here in order to help the compiler to infer the generic types datasets: (IChartDatasetProperties & IChartDatasetRegistry[TYPE])[]; } export type IChartOptionsBase = DeepPartial< ICoreChartOptions & IParsingOptions & ITooltipChartOptions & ILegendChartOptions & ITitleChartOptions & IChartAnimationOptions & IScaleChartOptions & IElementChartOptions & O >; export interface IChartOptionsRegistry { bar: IChartOptionsBase; line: IChartOptionsBase; scatter: IChartOptionsBase; bubble: IChartOptionsBase<{}>; pie: IChartOptionsBase; doughnut: IChartOptionsBase; polarArea: IChartOptionsBase; radar: IChartOptionsBase; } export type IChartOptions = IChartOptionsRegistry[keyof IChartOptionsRegistry] export interface IChartConfiguration< TYPE extends IChartType = IChartType, DATA extends unknown[] = unknown[], LABEL = string > { type: TYPE; data: IChartData; options?: IChartOptionsRegistry[TYPE]; plugins?: IPlugin[]; }