import type { RangeScale } from '../../treb-utils/src/index'; import type { Area } from './rectangle'; import type { UnitAddress } from '../../treb-parser/src/index'; import { type ArrayUnion, type CellValue, type ExtendedUnion, type UnionValue } from '../../treb-base-types/src/index'; export interface ReferenceMetadata { type: 'metadata'; address: UnitAddress; value: CellValue; format?: string; } export interface ReferenceSeries extends ExtendedUnion { key: 'series'; value: { label?: string; x?: UnionValue; y?: UnionValue; z?: UnionValue; index?: number; subtype?: string; data_labels?: string[]; axis?: number; }; } export declare const IsMetadata: (value?: unknown) => value is ExtendedUnion & { value: ReferenceMetadata; }; export declare const IsSeries: (value?: unknown) => value is ReferenceSeries; export declare const IsArrayUnion: (value?: unknown) => value is ArrayUnion; export type NumberOrUndefinedArray = Array; export interface AxisOptions { /** show labels */ labels?: boolean; /** label number format */ format?: string; /** tickmarks, only on x-axis (atm) */ ticks?: boolean; } export interface CalloutType { value: number; label?: string; } export interface CellData { address: { row: number; column: number; }; value?: unknown; format?: string; } export interface DonutSlice { index: number; value: number; percent: number; label?: string; title?: string; } /** common to all chart data types */ export interface ChartDataBaseType { title?: string; legend?: Array<{ label: string; index?: number; }>; legend_position?: LegendPosition; legend_style?: LegendStyle; title_layout?: 'top' | 'bottom'; lines?: boolean; filled?: boolean; markers?: boolean; smooth?: boolean; data_labels?: boolean; class_name?: string; /** different marker type for scatter plot */ points?: boolean; } /** default, empty chart (you can still add a title, I suppose) */ export interface NullChartData extends ChartDataBaseType { type: 'null'; } /** scatter plot (only used for correlation, atm) */ export interface ScatterData extends ChartDataBaseType { type: 'scatter'; x: number[]; y: number[]; count: number; } /** scatter plot used for line charting */ export interface ScatterData2 extends ChartDataBaseType { type: 'scatter2'; series?: SeriesType[]; x_scale: RangeScale; y_scale: RangeScale; y2_scale?: RangeScale; x_labels?: string[]; y_labels?: string[]; y2_labels?: string[]; style?: 'plot' | 'line' | 'area'; } export interface BubbleChartData extends ChartDataBaseType { type: 'bubble'; series: SeriesType[]; x_scale: RangeScale; y_scale: RangeScale; x_labels?: string[]; y_labels?: string[]; } /** base for column types (FIXME: probably common to scatter/line/area also) */ export interface ColumnDataBaseType extends ChartDataBaseType { column_width: number; x_labels?: string[]; y_labels?: string[]; } /** histogram */ export interface HistogramData extends ColumnDataBaseType { type: 'histogram'; bins: number[]; min: number; max: number; count: number; scale: RangeScale; titles?: string[]; } export interface LineBaseData extends ChartDataBaseType { series?: NumberOrUndefinedArray[]; series2?: SeriesType[]; stacked_series?: SeriesType[]; scale: RangeScale; x_scale?: RangeScale; titles?: string[]; x_labels?: string[]; y_labels?: string[]; callouts?: CalloutType[]; smooth?: boolean; } export interface BoxPlotData extends ChartDataBaseType { type: 'box'; series: SeriesType[]; x_labels?: string[]; series_names?: string[]; y_labels?: string[]; scale: RangeScale; max_n: number; data: { data: number[]; quartiles: [number, number, number]; whiskers: [number, number]; iqr: number; n: number; min: number; max: number; mean: number; }[]; } export interface LineData extends LineBaseData { type: 'line'; } export interface AreaData extends LineBaseData { type: 'area'; } export interface ColumnData extends LineBaseData { type: 'column'; round?: boolean; space?: number; } export interface HistogramData2 extends LineBaseData { type: 'histogram2'; round?: boolean; space?: number; } export interface BarData extends LineBaseData { type: 'bar'; round?: boolean; space?: number; stacked?: boolean; } export interface DonutDataBaseType extends ChartDataBaseType { slices: DonutSlice[]; } /** donut (FIXME: common type for pie, donut) */ export interface DonutChartData extends DonutDataBaseType { type: 'donut'; } /** pie (FIXME: common type for pie, donut) */ export interface PieChartData extends DonutDataBaseType { type: 'pie'; } /** union type */ export type ChartData = NullChartData | DonutChartData | HistogramData | HistogramData2 | PieChartData | ScatterData | ScatterData2 | LineData | AreaData | ColumnData | BarData | BubbleChartData | BoxPlotData; export declare enum LegendLayout { horizontal = 0, vertical = 1 } export declare enum LegendPosition { top = 0, bottom = 1, left = 2, right = 3 } export declare enum LegendStyle { line = 0, marker = 1, bubble = 2 } export interface LegendOptions { labels: Array<{ label: string; index?: number; }>; layout?: LegendLayout; position?: LegendPosition; style?: LegendStyle; area: Area; } export interface SubSeries { data: Array; format?: string; range?: { min: number; max: number; }; labels?: Array; } export interface SeriesType { label?: string; subtype?: string; x: SubSeries; y: SubSeries; y2?: SubSeries; z?: SubSeries; index?: number; labels?: string[]; axis?: number; }