UNPKG

@mui/x-charts

Version:

The community edition of MUI X Charts components.

97 lines 4.46 kB
import type { DefaultizedProps, MakeOptional, MakeRequired } from '@mui/x-internals/types'; import type { ScatterSeriesType, DefaultizedScatterSeriesType, ScatterItemIdentifier, ScatterValueType } from "./scatter.js"; import type { LineSeriesType, DefaultizedLineSeriesType, LineItemIdentifier } from "./line.js"; import type { BarItemIdentifier, BarSeriesType, DefaultizedBarSeriesType } from "./bar.js"; import type { PieSeriesType, DefaultizedPieSeriesType, PieItemIdentifier, PieValueType, DefaultizedPieValueType, PieSeriesLayout } from "./pie.js"; import type { DefaultizedRadarSeriesType, RadarItemIdentifier, RadarSeriesType } from "./radar.js"; import type { SeriesColor } from "./common.js"; export interface ChartsSeriesConfig { bar: { /** * Series type when passed to the formatter (some ids are given default values to simplify the DX) */ seriesInput: DefaultizedProps<BarSeriesType, 'id'> & MakeRequired<SeriesColor<number | null>, 'color'>; /** * Series type when stored in the context (with all the preprocessing added)) */ series: DefaultizedBarSeriesType; /** * Additional data computed from the series plus drawing area. * Useful for special charts like sankey where the series data is not sufficient to draw the series. * */ seriesLayout: {}; /** * Series typing such that the one user need to provide */ seriesProp: BarSeriesType; itemIdentifier: BarItemIdentifier; itemIdentifierWithData: BarItemIdentifier; valueType: number | null; canBeStacked: true; axisType: 'cartesian'; }; line: { seriesInput: DefaultizedProps<LineSeriesType, 'id'> & MakeRequired<SeriesColor<number | null>, 'color'>; series: DefaultizedLineSeriesType; seriesLayout: {}; seriesProp: LineSeriesType; itemIdentifier: LineItemIdentifier; itemIdentifierWithData: LineItemIdentifier; valueType: number | null; canBeStacked: true; axisType: 'cartesian'; }; scatter: { seriesInput: DefaultizedProps<ScatterSeriesType, 'id'> & MakeRequired<SeriesColor<ScatterValueType | null>, 'color'>; series: DefaultizedScatterSeriesType; seriesLayout: {}; seriesProp: ScatterSeriesType; valueType: ScatterValueType; itemIdentifier: ScatterItemIdentifier; itemIdentifierWithData: ScatterItemIdentifier; axisType: 'cartesian'; }; pie: { seriesInput: Omit<DefaultizedProps<PieSeriesType, 'id'>, 'data'> & { data: Array<MakeOptional<PieValueType, 'id'> & MakeRequired<SeriesColor<PieValueType | null>, 'color'>>; }; series: DefaultizedPieSeriesType; seriesLayout: PieSeriesLayout; seriesProp: PieSeriesType<MakeOptional<PieValueType, 'id'>>; itemIdentifier: PieItemIdentifier; itemIdentifierWithData: PieItemIdentifier; valueType: DefaultizedPieValueType; }; radar: { seriesInput: DefaultizedProps<RadarSeriesType, 'id'> & MakeRequired<SeriesColor<number>, 'color'>; series: DefaultizedRadarSeriesType; seriesLayout: {}; seriesProp: RadarSeriesType; itemIdentifier: RadarItemIdentifier; itemIdentifierWithData: RadarItemIdentifier; valueType: number; axisType: 'polar'; }; } export type ChartSeriesType = keyof ChartsSeriesConfig; export type CartesianChartSeriesType = keyof Pick<ChartsSeriesConfig, { [Key in ChartSeriesType]: ChartsSeriesConfig[Key] extends { axisType: 'cartesian'; } ? Key : never }[ChartSeriesType]>; export type PolarChartSeriesType = keyof Pick<ChartsSeriesConfig, { [Key in ChartSeriesType]: ChartsSeriesConfig[Key] extends { axisType: 'polar'; } ? Key : never }[ChartSeriesType]>; export type StackableChartSeriesType = keyof Pick<ChartsSeriesConfig, { [Key in ChartSeriesType]: ChartsSeriesConfig[Key] extends { canBeStacked: true; } ? Key : never }[ChartSeriesType]>; export type ChartSeries<T extends ChartSeriesType> = ChartsSeriesConfig[T]['seriesInput']; export type ChartSeriesDefaultized<T extends ChartSeriesType> = ChartsSeriesConfig[T] extends { canBeStacked: true; } ? ChartsSeriesConfig[T]['series'] & { visibleStackedData: [number, number][]; stackedData: [number, number][]; } : ChartsSeriesConfig[T]['series']; export type ChartSeriesLayout<T extends ChartSeriesType> = ChartsSeriesConfig[T] extends any ? ChartsSeriesConfig[T]['seriesLayout'] : never; export type DatasetElementType<T> = { [key: string]: T; }; export type DatasetType<T = unknown> = DatasetElementType<T>[];