TimeUnit,
IEvent,
} from './interfaces';
-import { IChartDataset, IChartConfiguration, IChartType } from '../interfaces';
+import {
+ DefaultDataPoint,
+ IChartConfiguration,
+ IChartData,
+ IChartDataset,
+ IChartOptions,
+ IChartType,
+ IScaleOptions
+} from '../interfaces';
export interface IDateAdapter {
/**
| false;
}
-export declare class Chart<TYPE extends IChartType = IChartType, DATA extends unknown[] = unknown[], LABEL = string> {
+export declare class Chart<
+ TYPE extends IChartType = IChartType,
+ DATA extends unknown[] = DefaultDataPoint<TYPE>,
+ LABEL = string
+> {
readonly platform: BasePlatform;
readonly id: string;
readonly canvas: HTMLCanvasElement;
readonly scale: Scale | undefined;
readonly attached: boolean;
- data: IChartConfiguration<TYPE, DATA, LABEL>['data'];
- options: IChartConfiguration<TYPE, DATA, LABEL>['options'];
+ data: IChartData<TYPE, DATA, LABEL>;
+ options: IChartOptions<TYPE>;
constructor(item: ChartItem, config: IChartConfiguration<TYPE, DATA, LABEL>);
major?: boolean;
}
-export interface IScaleOptions {
+export interface ICoreScaleOptions {
/**
* Controls the axis global visibility (visible when true, hidden when false). When display: 'auto', the axis is visible only if at least one associated dataset is visible.
* @default true
afterUpdate(axis: Scale): void;
}
-export interface Scale<O extends IScaleOptions = IScaleOptions> extends Element<{}, O>, IChartArea {
+export interface Scale<O extends ICoreScaleOptions = ICoreScaleOptions> extends Element<{}, O>, IChartArea {
readonly id: string;
readonly type: string;
readonly ctx: CanvasRenderingContext2D;
}
export const Scale: {
prototype: Scale;
- new <O extends IScaleOptions = IScaleOptions>(cfg: any): Scale<O>;
+ new <O extends ICoreScaleOptions = ICoreScaleOptions>(cfg: any): Scale<O>;
};
export interface IScriptAbleScaleContext {
ITitleChartOptions,
} from './plugins';
import { IChartAnimationOptions, IParsingOptions, IPlugin } from './core';
-import { IScaleChartOptions } from './scales';
+import {
+ ILinearScaleOptions,
+ ILogarithmicScaleOptions,
+ ICategoryScaleOptions,
+ IRadialLinearScaleOptions,
+ ITimeScaleOptions,
+} from './scales';
export type DeepPartial<T> = T extends {}
? {
}
: T;
+export type DistributiveArray<T> = T extends unknown ? T[] : never
+
+export enum ScaleTypeEnum {
+ linear = 'linear',
+ logarithmic = 'logarithmic',
+ category = 'category',
+ radialLinear = 'radialLinear',
+ time = 'time',
+ timeseries = 'timeseries',
+}
+
+export type IScaleType = keyof typeof ScaleTypeEnum;
+
+export interface ICartesianScaleTypeRegistry {
+ linear: {
+ options: ILinearScaleOptions;
+ };
+ logarithmic: {
+ options: ILogarithmicScaleOptions;
+ };
+ category: {
+ options: ICategoryScaleOptions;
+ };
+ time: {
+ options: ITimeScaleOptions;
+ };
+ timeseries: {
+ options: ITimeScaleOptions;
+ };
+}
+
+export interface IRadialScaleTypeRegistry {
+ radialLinear: {
+ options: IRadialLinearScaleOptions;
+ };
+}
+
+export interface IScaleTypeRegistry extends ICartesianScaleTypeRegistry, IRadialScaleTypeRegistry {
+}
+
export enum ChartTypeEnum {
bar = 'bar',
bubble = 'bubble',
export type IChartType = keyof typeof ChartTypeEnum;
-export interface IChartDatasetProperties<TYPE extends IChartType, DATA extends unknown[]> {
- type?: TYPE;
- data: DATA;
+export interface IChartTypeRegistry {
+ bar: {
+ chartOptions: IBarControllerChartOptions;
+ datasetOptions: IBarControllerDatasetOptions;
+ defaultDataPoint: number;
+ scales: keyof ICartesianScaleTypeRegistry;
+ };
+ line: {
+ chartOptions: ILineControllerChartOptions;
+ datasetOptions: ILineControllerDatasetOptions & IFillerControllerDatasetOptions;
+ defaultDataPoint: IScatterDataPoint;
+ scales: keyof ICartesianScaleTypeRegistry;
+ };
+ scatter: {
+ chartOptions: IScatterControllerChartOptions;
+ datasetOptions: IScatterControllerDatasetOptions;
+ defaultDataPoint: IScatterDataPoint;
+ scales: keyof ICartesianScaleTypeRegistry;
+ };
+ bubble: {
+ chartOptions: {};
+ datasetOptions: IBubbleControllerDatasetOptions;
+ defaultDataPoint: IBubbleDataPoint;
+ scales: keyof ICartesianScaleTypeRegistry;
+ };
+ pie: {
+ chartOptions: IPieControllerChartOptions;
+ datasetOptions: IPieControllerDatasetOptions;
+ defaultDataPoint: IPieDataPoint;
+ scales: keyof ICartesianScaleTypeRegistry;
+ };
+ doughnut: {
+ chartOptions: IDoughnutControllerChartOptions;
+ datasetOptions: IDoughnutControllerDatasetOptions;
+ defaultDataPoint: IDoughnutDataPoint;
+ scales: keyof ICartesianScaleTypeRegistry;
+ };
+ polarArea: {
+ chartOptions: IPolarAreaControllerChartOptions;
+ datasetOptions: IPolarAreaControllerDatasetOptions;
+ defaultDataPoint: number;
+ scales: keyof IRadialScaleTypeRegistry;
+ };
+ radar: {
+ chartOptions: IRadarControllerChartOptions;
+ datasetOptions: IRadarControllerDatasetOptions;
+ defaultDataPoint: number;
+ scales: keyof IRadialScaleTypeRegistry;
+ };
}
-export type IChartDatasetBase<TYPE extends IChartType, DATA extends unknown[], O> = DeepPartial<
- IControllerDatasetOptions & IParsingOptions & O
-> & IChartDatasetProperties<TYPE, DATA>;
-
-export type IBarControllerDataset<DATA extends unknown[] = number[]> = IChartDatasetBase<
- 'bar',
- DATA,
- IBarControllerDatasetOptions
->;
-export type ILineControllerDataset<DATA extends unknown[] = IScatterDataPoint[]> = IChartDatasetBase<
- 'line',
- DATA,
- ILineControllerDatasetOptions & IFillerControllerDatasetOptions
->;
-export type IScatterControllerDataset<DATA extends unknown[] = IScatterDataPoint[]> = IChartDatasetBase<
- 'scatter',
- DATA,
- IScatterControllerDatasetOptions
->;
-export type IBubbleControllerDataset<DATA extends unknown[] = IBubbleDataPoint[]> = IChartDatasetBase<
- 'bubble',
- DATA,
- IBubbleControllerDatasetOptions
+export type IScaleOptions<SCALES extends IScaleType = IScaleType> = DeepPartial<
+ { [key in IScaleType]: { type: key } & IScaleTypeRegistry[key]['options'] }[SCALES]
>;
-export type IPieControllerDataset<DATA extends unknown[] = IPieDataPoint[]> = IChartDatasetBase<
- 'pie',
- DATA,
- IPieControllerDatasetOptions
->;
-export type IDoughnutControllerDataset<DATA extends unknown[] = IDoughnutDataPoint[]> = IChartDatasetBase<
- 'doughnut',
- DATA,
- IDoughnutControllerDatasetOptions
->;
-export type IPolarAreaControllerDataset<DATA extends unknown[] = number[]> = IChartDatasetBase<
- 'polarArea',
- DATA,
- IPolarAreaControllerDatasetOptions
+
+export type IDatasetChartOptions<TYPE extends IChartType = IChartType> = {
+ [key in TYPE]: {
+ datasets: IChartTypeRegistry[key]['datasetOptions'];
+ };
+};
+
+export type IScaleChartOptions<TYPE extends IChartType = IChartType> = {
+ scales: {
+ [key: string]: IScaleOptions<IChartTypeRegistry[TYPE]['scales']>;
+ };
+};
+
+export type IChartOptions<TYPE extends IChartType = IChartType> = DeepPartial<
+ ICoreChartOptions &
+ IParsingOptions &
+ ITooltipChartOptions &
+ ILegendChartOptions &
+ ITitleChartOptions &
+ IChartAnimationOptions &
+ IElementChartOptions &
+ IDatasetChartOptions<TYPE> &
+ IScaleChartOptions<TYPE> &
+ IChartTypeRegistry[TYPE]['chartOptions']
>;
-export type IRadarControllerDataset<DATA extends unknown[] = number[]> = IChartDatasetBase<
- 'radar',
- DATA,
- IRadarControllerDatasetOptions
+
+export type DefaultDataPoint<TYPE extends IChartType> = IChartType extends TYPE ? unknown[] : DistributiveArray<
+ IChartTypeRegistry[TYPE]['defaultDataPoint']
>;
-export interface IChartDatasetRegistry<DATA extends unknown[]> {
- bar: IBarControllerDataset<DATA>;
- line: ILineControllerDataset<DATA>;
- scatter: IScatterControllerDataset<DATA>;
- bubble: IBubbleControllerDataset<DATA>;
- pie: IPieControllerDataset<DATA>;
- doughnut: IDoughnutControllerDataset<DATA>;
- polarArea: IPolarAreaControllerDataset<DATA>;
- radar: IRadarControllerDataset<DATA>;
+export interface IChartDatasetProperties<TYPE extends IChartType, DATA extends unknown[]> {
+ type?: TYPE;
+ data: DATA;
}
-export type IChartDataset<T extends unknown[] = unknown[]> = IChartDatasetRegistry<T>[keyof IChartDatasetRegistry<T>]
+export type IChartDataset<
+ TYPE extends IChartType = IChartType,
+ DATA extends unknown[] = DefaultDataPoint<TYPE>
+> = DeepPartial<
+ IParsingOptions &
+ { [key in IChartType]: { type: key } & IChartTypeRegistry[key]['datasetOptions'] }[TYPE]
+> & IChartDatasetProperties<TYPE, DATA>;
export interface IChartData<
TYPE extends IChartType = IChartType,
- DATA extends unknown[] = unknown[],
+ DATA extends unknown[] = DefaultDataPoint<TYPE>,
LABEL = string
> {
labels: LABEL[];
- // IChartDatasetProperties is repeated here in order to help the compiler to infer the generic types
- datasets: (IChartDatasetProperties<TYPE, DATA> & IChartDatasetRegistry<DATA>[TYPE])[];
+ datasets: IChartDataset<TYPE, DATA>[];
}
-export type IChartOptionsBase<O> = DeepPartial<
- ICoreChartOptions &
- IParsingOptions &
- ITooltipChartOptions &
- ILegendChartOptions &
- ITitleChartOptions &
- IChartAnimationOptions &
- IScaleChartOptions &
- IElementChartOptions &
- O
->;
-
-export interface IChartOptionsRegistry {
- bar: IChartOptionsBase<IBarControllerChartOptions>;
- line: IChartOptionsBase<ILineControllerChartOptions>;
- scatter: IChartOptionsBase<IScatterControllerChartOptions>;
- bubble: IChartOptionsBase<{}>;
- pie: IChartOptionsBase<IPieControllerChartOptions>;
- doughnut: IChartOptionsBase<IDoughnutControllerChartOptions>;
- polarArea: IChartOptionsBase<IPolarAreaControllerChartOptions>;
- radar: IChartOptionsBase<IRadarControllerChartOptions>;
-}
-
-export type IChartOptions = IChartOptionsRegistry[keyof IChartOptionsRegistry]
-
export interface IChartConfiguration<
TYPE extends IChartType = IChartType,
- DATA extends unknown[] = unknown[],
+ DATA extends unknown[] = DefaultDataPoint<TYPE>,
LABEL = string
> {
type: TYPE;
data: IChartData<TYPE, DATA, LABEL>;
- options?: IChartOptionsRegistry[TYPE];
+ options?: IChartOptions<TYPE>;
plugins?: IPlugin[];
}
-import { ScriptAbleScale, IScaleOptions, ITick, Scale } from '../core';
+import { ScriptAbleScale, ICoreScaleOptions, ITick, Scale } from '../core';
import { Color, IChartComponent, IFontSpec, TimeUnit } from '../core/interfaces';
-import { DeepPartial } from '../interfaces';
export interface IGridLineOptions {
/**
};
}
-export interface ICartesianScaleOptions extends IScaleOptions {
+export interface ICartesianScaleOptions extends ICoreScaleOptions {
/**
* Position of the axis.
*/
*/
round: false | TimeUnit;
/**
- * If boolean and true and the unit is set to 'week', then the first day of the week will be Monday. Otherwise, it will be Sunday.
+ * If boolean and true and the unit is set to 'week', then the first day of the week will be Monday. Otherwise, it will be Sunday.
* If `number`, the index of the first day of the week (0 - Sunday, 6 - Saturday).
* @default false
*/
new <O extends ITimeScaleOptions = ITimeScaleOptions>(cfg: any): TimeSeriesScale<O>;
};
-export type IRadialLinearScaleOptions = IScaleOptions & {
+export type IRadialLinearScaleOptions = ICoreScaleOptions & {
animate: boolean;
angleLines: {
prototype: RadialLinearScale;
new <O extends IRadialLinearScaleOptions = IRadialLinearScaleOptions>(cfg: any): RadialLinearScale<O>;
};
-
-export interface ILinearScaleType extends DeepPartial<ILinearScaleOptions> {
- type: 'linear';
-}
-export interface ILogarithmicScaleType extends DeepPartial<ILogarithmicScaleOptions> {
- type: 'logarithmic';
-}
-export interface ICategoryScaleType extends DeepPartial<ICategoryScaleOptions> {
- type: 'category';
-}
-export interface IRadialLinearScaleType extends DeepPartial<IRadialLinearScaleOptions> {
- type: 'radialLinear';
-}
-export interface ITimeScaleType extends DeepPartial<ITimeScaleOptions> {
- type: 'time';
-}
-export interface ITimeSeriesScaleType extends DeepPartial<ITimeScaleOptions> {
- type: 'timeseries';
-}
-
-export interface IScaleChartOptions {
- scales: {
- [key: string]: { type: string } & DeepPartial<IScaleOptions>;
- };
-}