import { SectorStyle } from './brushes'; import { ScatterSeriesIconType } from './components/series'; type SeriesThemeMap = { line?: LineChartSeriesTheme; area?: AreaChartSeriesTheme; scatter?: ScatterChartSeriesTheme; heatmap?: HeatmapChartSeriesTheme; treemap?: TreemapChartSeriesTheme; bar?: BoxChartSeriesTheme; column?: BoxChartSeriesTheme; bubble?: CommonSeriesTheme; pie?: PieChartSeriesTheme; radar?: RadarChartSeriesTheme; boxPlot?: BoxPlotChartSeriesTheme; bullet?: BulletChartSeriesTheme; radialBar?: RadialBarChartSeriesTheme; gauge?: GaugeChartSeriesTheme; }; type SeriesTheme = | LineChartSeriesTheme | AreaChartSeriesTheme | ComboChartSeriesTheme | HeatmapChartSeriesTheme | TreemapChartSeriesTheme | PieChartSeriesTheme | RadarChartSeriesTheme | ScatterChartSeriesTheme | BubbleChartSeriesTheme | NestedPieChartSeriesTheme | BoxChartSeriesTheme | BoxPlotChartSeriesTheme | BulletChartSeriesTheme | GaugeChartSeriesTheme; type FontTheme = { fontSize?: number; fontFamily?: string; fontWeight?: string | number; color?: string; }; type ChartTheme = { fontFamily?: string; backgroundColor?: string; }; type LegendTheme = { label?: FontTheme; }; type AxisLabelTheme = FontTheme & { textBubble?: Omit; }; type CircularAxisTheme = { label?: AxisLabelTheme; lineWidth?: number; strokeStyle?: string; dotColor?: string; title?: FontTheme; tick?: { lineWidth?: number; strokeStyle?: string; }; }; type VerticalAxisTheme = { label?: AxisLabelTheme; }; type Theme = { chart: ChartTheme; series: SeriesThemeMap; title: FontTheme; xAxis: AxisTheme; yAxis: AxisTheme | AxisTheme[]; verticalAxis: VerticalAxisTheme; circularAxis: CircularAxisTheme; legend: LegendTheme; tooltip: TooltipTheme; plot: PlotTheme; exportMenu: ExportMenuTheme; noData: FontTheme; }; type AxisTheme = { title?: FontTheme; label?: FontTheme; width?: number; color?: string; }; type TooltipTheme = { background?: string; borderColor?: string; borderWidth?: number; borderStyle?: string; borderRadius?: number; header?: FontTheme; body?: FontTheme; }; type LineTheme = { lineColor?: string; lineWidth?: number; dashSegments?: number[]; }; interface PlotTheme extends LineTheme { vertical?: LineTheme; horizontal?: LineTheme; backgroundColor?: string; } type XIconTheme = { color?: string; lineWidth?: number; }; type DotIconTheme = { color?: string; width?: number; height?: number; gap?: number; }; type ExportMenuButtonTheme = { backgroundColor?: string; borderRadius?: number; borderWidth?: number; borderColor?: string; xIcon?: XIconTheme; dotIcon?: DotIconTheme; }; type ExportMenuPanelTheme = BorderTheme & { borderRadius?: number; header?: FontTheme & { backgroundColor?: string; }; body?: FontTheme & { backgroundColor?: string; }; }; type ExportMenuTheme = { button?: ExportMenuButtonTheme; panel?: ExportMenuPanelTheme; }; type ComboChartSeriesTheme = | NestedPieChartSeriesTheme | LineScatterChartSeriesTheme | ColumnLineChartSeriesTheme | LineAreaChartSeriesTheme; type SelectSectorStyle = SectorStyle & { color?: string; restSeries?: { areaOpacity?: number; }; areaOpacity?: number; }; type PieChartSeriesTheme = { colors?: string[]; lineWidth?: number; strokeStyle?: string; hover?: SectorStyle & { color?: string }; select?: SelectSectorStyle; areaOpacity?: number; dataLabels?: PieDataLabelTheme; }; type NestedPieChartSeriesTheme = Record | PieChartSeriesTheme; interface TreemapChartSeriesTheme { colors?: string[]; startColor?: string; endColor?: string; borderColor?: string; borderWidth?: number; select?: { color?: string; } & BorderTheme; hover?: { color?: string; } & BorderTheme; dataLabels?: BoxDataLabel; } interface HeatmapChartSeriesTheme { startColor: string; endColor: string; borderColor?: string; borderWidth?: number; select?: { color?: string; } & BorderTheme; hover?: { color?: string; } & BorderTheme; dataLabels?: BoxDataLabel; } type DotTheme = { color?: string; radius?: number; } & BorderTheme; interface LineTypeSeriesTheme { color?: string; lineWidth?: number; dashSegments?: number[]; } interface ScatterChartSeriesTheme extends CommonSeriesTheme { iconTypes?: ScatterSeriesIconType[]; borderWidth?: number; fillColor?: string; size?: number; select?: { size?: number; fillColor?: string; } & BorderTheme; hover?: { size?: number; fillColor?: string; } & BorderTheme; } interface BubbleChartSeriesTheme extends CommonSeriesTheme { borderWidth?: number; borderColor?: string; select?: Omit; hover?: Omit; } interface LineChartSeriesTheme extends Omit { colors?: string[]; dot?: Omit; select?: { dot?: DotTheme; }; hover?: { dot?: DotTheme; }; dataLabels?: BubbleDataLabel; } interface CommonSeriesTheme { colors?: string[]; } interface AreaChartSeriesTheme extends LineChartSeriesTheme { areaOpacity?: number; select?: { dot?: DotTheme; areaOpacity?: number; restSeries?: { areaOpacity?: number; }; }; } interface LineScatterChartSeriesTheme { line?: LineChartSeriesTheme; scatter?: ScatterChartSeriesTheme; colors?: string[]; } interface ColumnLineChartSeriesTheme { column?: BoxChartSeriesTheme; line?: LineChartSeriesTheme; colors?: string[]; } interface LineAreaChartSeriesTheme { line?: LineChartSeriesTheme; area?: AreaChartSeriesTheme; colors?: string[]; } interface BaseThemeOptions { chart?: ChartTheme; noData?: FontTheme; title?: FontTheme; legend?: LegendTheme; tooltip?: TooltipTheme; exportMenu?: ExportMenuTheme; } type GroupedRect = { color?: string; opacity?: number; }; type BorderTheme = { borderColor?: string; borderWidth?: number; }; type ConnectorTheme = { color?: string; lineWidth?: number; dashSegments?: number[]; }; interface BoxChartSeriesTheme extends CommonSeriesTheme { barWidth?: number | string; areaOpacity?: number; hover?: { color?: string; groupedRect?: GroupedRect; } & ShadowTheme & BorderTheme; select?: { color?: string; groupedRect?: GroupedRect; restSeries?: { areaOpacity?: number; }; areaOpacity?: number; } & ShadowTheme & BorderTheme; connector?: ConnectorTheme; dataLabels?: BoxTypeDataLabelTheme; } interface BulletChartSeriesTheme extends CommonSeriesTheme { areaOpacity?: number; barWidth?: number | string; barWidthRatios?: { rangeRatio?: number; bulletRatio?: number; markerRatio?: number; }; markerLineWidth?: number; rangeColors?: string[]; borderColor?: string; borderWidth?: number; hover?: { color?: string; groupedRect?: GroupedRect; } & BorderTheme & ShadowTheme; select?: { color?: string; groupedRect?: GroupedRect; restSeries?: { areaOpacity?: number; }; areaOpacity?: number; } & BorderTheme & ShadowTheme; dataLabels?: BulletDataLabelTheme; } interface BoxPlotChartSeriesTheme extends CommonSeriesTheme { areaOpacity?: number; barWidth?: number | string; barWidthRatios?: { barRatio?: number; minMaxBarRatio?: number; }; dot?: BoxPlotDotTheme; line?: BoxPlotLineTypeTheme; rect?: BorderTheme; hover?: { color?: string; rect?: BorderTheme; dot?: BoxPlotDotTheme; line?: BoxPlotLineTypeTheme; } & ShadowTheme; select?: { color?: string; rect?: BorderTheme; dot?: BoxPlotDotTheme; line?: BoxPlotLineTypeTheme; restSeries?: { areaOpacity?: number; }; areaOpacity?: number; } & ShadowTheme; } type LineTypeTheme = { lineWidth?: number; color?: string }; type BoxPlotLineTypeTheme = { whisker?: LineTypeTheme; minimum?: LineTypeTheme; maximum?: LineTypeTheme; median?: LineTypeTheme; }; type BoxPlotDotTheme = DotTheme & { useSeriesColor?: boolean }; type ShadowTheme = { shadowColor?: string; shadowOffsetX?: number; shadowOffsetY?: number; shadowBlur?: number; }; interface RadarChartSeriesTheme { colors?: string[]; lineWidth?: number; dashSegments?: number[]; areaOpacity?: number; dot?: DotTheme; select?: { dot?: DotTheme; areaOpacity?: number; restSeries?: { areaOpacity: number; }; }; hover?: { dot?: DotTheme; }; } type ArrowDirection = 'top' | 'right' | 'bottom' | 'left'; type ArrowTheme = { visible?: boolean; width?: number; height?: number; direction?: ArrowDirection; }; type TextBubbleTheme = { visible?: boolean; arrow?: ArrowTheme; paddingX?: number; paddingY?: number; backgroundColor?: string; borderRadius?: number; textAlign?: CanvasTextAlign; } & BorderTheme & ShadowTheme; type CalloutTheme = { lineWidth?: number; lineColor?: string; useSeriesColor?: boolean }; type TextStrokeTheme = { lineWidth?: number; textStrokeColor?: string; shadowColor?: string; shadowBlur?: number; }; interface CommonDataLabelTheme extends FontTheme, TextStrokeTheme { useSeriesColor?: boolean; } interface BubbleDataLabel extends CommonDataLabelTheme { textBubble?: TextBubbleTheme; } interface BoxDataLabel extends CommonDataLabelTheme { textBubble?: Omit; } interface BoxTypeDataLabelTheme extends BubbleDataLabel { stackTotal?: BubbleDataLabel; } interface BulletDataLabelTheme extends BubbleDataLabel { marker?: BubbleDataLabel; } interface PieDataLabelTheme extends BoxDataLabel { pieSeriesName?: BoxDataLabel; callout?: CalloutTheme; } type GroupedSector = { color?: string; opacity?: number; }; interface RadialBarChartSeriesTheme extends CommonSeriesTheme { barWidth?: number | string; colors?: string[]; lineWidth?: number; strokeStyle?: string; hover?: SectorStyle & { color?: string; groupedSector?: GroupedSector }; select?: SelectSectorStyle & { groupedSector?: GroupedSector }; areaOpacity?: number; dataLabels?: BoxDataLabel; } type DataLabelTheme = | BubbleDataLabel | BoxDataLabel | BoxTypeDataLabelTheme | BulletDataLabelTheme | PieDataLabelTheme; interface LineChartThemeOptions extends BaseThemeOptions { series?: LineChartSeriesTheme; yAxis?: AxisTheme | AxisTheme[]; xAxis?: AxisTheme; plot?: PlotTheme; } interface AreaChartThemeOptions extends BaseThemeOptions { series?: AreaChartSeriesTheme; yAxis?: AxisTheme | AxisTheme[]; xAxis?: AxisTheme; plot?: PlotTheme; } interface LineAreaChartThemeOptions extends BaseThemeOptions { series?: LineAreaChartSeriesTheme; yAxis?: AxisTheme | AxisTheme[]; xAxis?: AxisTheme; plot?: PlotTheme; } interface LineScatterChartThemeOptions extends BaseThemeOptions { series?: LineScatterChartSeriesTheme; yAxis?: AxisTheme | AxisTheme[]; xAxis?: AxisTheme; plot?: PlotTheme; } interface PieChartThemeOptions extends BaseThemeOptions { series?: PieChartSeriesTheme; plot?: PlotTheme; } interface NestedPieChartThemeOptions extends BaseThemeOptions { series?: NestedPieChartSeriesTheme; plot?: PlotTheme; } interface RadarChartThemeOptions extends BaseThemeOptions { series?: RadarChartSeriesTheme; verticalAxis?: VerticalAxisTheme; circularAxis?: CircularAxisTheme; plot?: LineTheme; } interface HeatmapChartThemeOptions extends BaseThemeOptions { series?: HeatmapChartSeriesTheme; yAxis?: AxisTheme; xAxis?: AxisTheme; plot?: PlotTheme; } interface TreemapChartThemeOptions extends BaseThemeOptions { series?: TreemapChartSeriesTheme; } interface ScatterChartThemeOptions extends BaseThemeOptions { series?: ScatterChartSeriesTheme; yAxis?: AxisTheme; xAxis?: AxisTheme; plot?: PlotTheme; } interface BubbleChartThemeOptions extends BaseThemeOptions { series?: BubbleChartSeriesTheme; yAxis?: AxisTheme; xAxis?: AxisTheme; plot?: PlotTheme; } interface BoxChartThemeOptions extends BaseThemeOptions { series?: BoxChartSeriesTheme; yAxis?: AxisTheme | AxisTheme[]; xAxis?: AxisTheme; plot?: PlotTheme; } interface BulletCharThemeOptions extends BaseThemeOptions { series?: BulletChartSeriesTheme; yAxis?: AxisTheme; xAxis?: AxisTheme; plot?: PlotTheme; } interface BoxPlotCharThemeOptions extends BaseThemeOptions { series?: BoxPlotChartSeriesTheme; yAxis?: AxisTheme; xAxis?: AxisTheme; plot?: PlotTheme; } interface ColumnLineChartThemeOptions extends BaseThemeOptions { series?: ColumnLineChartSeriesTheme; yAxis?: AxisTheme | AxisTheme[]; xAxis?: AxisTheme; plot?: PlotTheme; } type CheckAnchorPieSeries = { hasOuterAnchor: boolean; hasOuterAnchorPieSeriesName: boolean; }; interface RadialBarChartThemeOptions extends BaseThemeOptions { series?: RadialBarChartSeriesTheme; verticalAxis?: VerticalAxisTheme; circularAxis?: CircularAxisTheme; plot?: LineTheme; } type PinTheme = { radius: number; color: string; borderWidth: number; borderColor: string; }; type ClockHandSizeTheme = string | number | number[] | string[]; type ClockHandTheme = { color: string; size: ClockHandSizeTheme; baseLine: number; }; type SolidTheme = { barWidth?: number | string; lineWidth?: number; strokeStyle?: string; shadowColor?: string; shadowBlur?: number; shadowOffsetX?: number; shadowOffsetY?: number; color?: string; backgroundSolid?: { color?: string }; }; interface GaugeChartSeriesTheme extends CommonSeriesTheme { areaOpacity?: number; solid?: SolidTheme; clockHand?: Partial; pin?: Partial; hover?: { clockHand?: Partial; pin?: Partial; solid?: Omit; }; select?: { clockHand?: Partial; pin?: Partial; solid?: Omit; areaOpacity?: number; restSeries?: { areaOpacity?: number; }; }; dataLabels?: BoxDataLabel; } type GaugePlotTheme = { bands: { barWidth?: number; }; }; interface GaugeChartThemeOptions extends BaseThemeOptions { series?: GaugeChartSeriesTheme; circularAxis?: CircularAxisTheme; plot?: GaugePlotTheme; }