import type { CurveFactory } from 'd3-shape'; export type ChartValue = string | number | Date; export type ChartKey = string | number; export type ChartDataIntent = 'brand' | 'caution' | 'negative' | 'neutral' | 'positive' | 'warning'; export type ChartChannel = Extract | ((datum: TDatum, index: number, data: readonly TDatum[]) => TValue); export type ChartVisual = TValue | ((datum: TDatum, index: number, data: readonly TDatum[]) => TValue); /** Structural boundary accepted by the chart compiler for native D3 scales. */ export type ChartScale = ((value: ChartValue) => unknown) & { copy?: () => ChartScale; domain: (...values: unknown[]) => unknown; range: (...values: unknown[]) => unknown; bandwidth?: () => number; ticks?: (count?: number) => ChartValue[]; tickFormat?: (count?: number) => (value: ChartValue) => string; nice?: (count?: number) => unknown; }; /** A configured D3 scale or a zero-argument D3 scale factory. */ export type ChartScaleSource = ChartScale | (() => unknown); export interface ChartTickOptions { count?: number; values?: readonly ChartValue[]; format?: (value: ChartValue, locale: string) => string; /** Minimum measured gap between adjacent tick labels, in CSS pixels. */ spacing?: number; /** Length of the tick stub extending away from the plot, in CSS pixels. */ size?: number; /** Gap between the end of a tick stub and its label, in CSS pixels. */ padding?: number; /** Rotation in degrees. Negative values rotate counter-clockwise. */ rotate?: number; } export interface ChartAxisPresentation { label?: string; /** Render the axis baseline. Defaults to true. */ line?: boolean; ticks?: ChartTickOptions; } export interface ChartAxisOptions { scale: ChartScaleSource; nice?: boolean; grid?: boolean; axis?: false | ChartAxisPresentation; } export interface ChartMargin { top?: number; right?: number; bottom?: number; left?: number; } export type ChartFocusMode = 'none' | 'nearest' | 'nearest-x' | 'nearest-y' | 'group-x' | 'group-y'; export interface ChartPoint { key: ChartKey; sceneKey: string; markId: string; datum: TDatum; datumIndex: number; groupValue?: ChartValue; groupLabel?: string; xValue: ChartValue; yValue: ChartValue; /** Primary semantic value for polar, heatmap, and distribution marks. */ value?: ChartValue; angleValue?: ChartValue; radiusValue?: ChartValue; x: number; y: number; color: string; } export interface ChartTooltipItem { label: string; value: string; color?: string; } export interface ChartTooltipContext { locale: string; primary: ChartPoint; points: readonly ChartPoint[]; } export interface ChartTooltipOptions { format?: (point: ChartPoint, locale: string) => string; formatGroupHeading?: (points: readonly ChartPoint[], locale: string) => string; formatGroupItem?: (point: ChartPoint, locale: string) => ChartTooltipItem; } export type ChartTooltip = boolean | ChartTooltipOptions; export interface ChartColorOptions { domain?: readonly ChartValue[]; range?: readonly string[]; } export interface ChartBuildContext { width: number; height: number; } export interface ChartCartesianCoordinate { type?: 'cartesian'; } export interface ChartPolarCoordinate { type: 'polar'; /** Radians measured clockwise from twelve o'clock. */ startAngle?: number; /** Radians measured clockwise from twelve o'clock. */ endAngle?: number; /** Default inner radius as a fraction of the available radius. */ innerRadius?: number; /** Outer radius as a fraction of the available radius. */ outerRadius?: number; grid?: 'none' | 'polygon'; } export type ChartCoordinate = ChartCartesianCoordinate | ChartPolarCoordinate; export interface ChartPolarAxisOptions { domain?: readonly ChartValue[]; label?: string; ticks?: ChartTickOptions; grid?: boolean; } export interface ChartCenterContent { value?: string; caption?: string; } export interface ChartCenterOptions extends ChartCenterContent { /** Optional focused content. Authored content remains the default. */ focused?: (point: ChartPoint, locale: string) => ChartCenterContent; } export type ChartMarkKind = 'polar' | 'line-y' | 'area-y' | 'bar-x' | 'bar-y' | 'box-y' | 'dot' | 'rule-x' | 'rule-y' | 'band-x' | 'band-y' | 'rect' | 'cell' | 'text' | 'arc' | 'radial-line' | 'radial-area' | 'radial-dot'; export interface ChartMark { kind: ChartMarkKind; data: readonly TDatum[]; options: ChartMarkOptions; } export interface ChartPolarContainerOptions { id?: string; marks: readonly ChartMark[]; angle?: ChartPolarAxisOptions; radius?: ChartAxisOptions; /** Radians measured clockwise from twelve o'clock. */ startAngle?: number; /** Radians measured clockwise from twelve o'clock. */ endAngle?: number; innerRadius?: number; outerRadius?: number; grid?: 'none' | 'polygon'; center?: ChartCenterOptions; } export interface ChartBaseMarkOptions { id?: string; /** Exclude decorative layers from semantic focus while retaining rendering. */ interactive?: boolean; key?: ChartChannel; z?: ChartChannel; color?: ChartChannel; value?: ChartChannel; fill?: ChartVisual; stroke?: ChartVisual; opacity?: ChartVisual; fillOpacity?: ChartVisual; strokeOpacity?: ChartVisual; strokeWidth?: ChartVisual; strokeDasharray?: ChartVisual; } export interface ChartLineYOptions extends ChartBaseMarkOptions { x?: ChartChannel; y?: ChartChannel; curve?: CurveFactory; } export interface ChartAreaYOptions extends ChartBaseMarkOptions { x?: ChartChannel; y?: ChartChannel; y1?: ChartChannel; y2?: ChartChannel; curve?: CurveFactory; } export type ChartBarLayout = 'single' | 'grouped' | 'stacked'; export interface ChartBarOptions extends ChartBaseMarkOptions { x?: ChartChannel; y?: ChartChannel; x1?: ChartChannel; x2?: ChartChannel; y1?: ChartChannel; y2?: ChartChannel; layout?: ChartBarLayout; inset?: ChartVisual; radius?: ChartVisual; } export interface ChartBoxYOptions extends ChartBaseMarkOptions { x?: ChartChannel; y?: ChartChannel; /** Tukey whisker multiplier. */ whisker?: number; inset?: number; radius?: number | string; } export interface ChartDotOptions extends ChartBaseMarkOptions { x?: ChartChannel; y?: ChartChannel; r?: ChartVisual; } export interface ChartRuleOptions extends ChartBaseMarkOptions { x?: ChartChannel; y?: ChartChannel; } export interface ChartBandOptions extends ChartBaseMarkOptions { x1?: ChartChannel; x2?: ChartChannel; y1?: ChartChannel; y2?: ChartChannel; } export interface ChartRectOptions extends ChartBaseMarkOptions { x1?: ChartChannel; x2?: ChartChannel; y1?: ChartChannel; y2?: ChartChannel; radius?: ChartVisual; inset?: ChartVisual; } export interface ChartCellOptions extends ChartBaseMarkOptions { x?: ChartChannel; y?: ChartChannel; intensity?: ChartChannel; intent?: ChartDataIntent; minimumOpacity?: number; maximumOpacity?: number; inset?: number; radius?: number | string; } export interface ChartTextOptions extends ChartBaseMarkOptions { x?: ChartChannel; y?: ChartChannel; text?: ChartChannel; fontFamily?: ChartVisual; fontSize?: ChartVisual; fontWeight?: ChartVisual; textAnchor?: ChartVisual; dx?: ChartVisual; dy?: ChartVisual; } export interface ChartArcOptions extends ChartBaseMarkOptions { theta1?: ChartChannel; theta2?: ChartChannel; innerRadius?: ChartVisual; outerRadius?: ChartVisual; cornerRadius?: ChartVisual; padAngle?: ChartVisual; label?: ChartChannel; } export interface ChartRadialOptions extends ChartBaseMarkOptions { angle?: ChartChannel; radius?: ChartChannel; radius1?: ChartChannel; radius2?: ChartChannel; curve?: CurveFactory; r?: ChartVisual; } export type ChartMarkOptions = ChartLineYOptions | ChartAreaYOptions | ChartBarOptions | ChartBoxYOptions | ChartDotOptions | ChartRuleOptions | ChartBandOptions | ChartRectOptions | ChartCellOptions | ChartTextOptions | ChartArcOptions | ChartRadialOptions; export interface ChartSpec { marks: readonly ChartMark[] | readonly ChartMark[]; coordinate?: ChartCoordinate; x?: ChartAxisOptions; y?: ChartAxisOptions; angle?: ChartPolarAxisOptions; radius?: ChartAxisOptions; center?: ChartCenterOptions; margin?: number | ChartMargin; guides?: boolean; /** Clip graphical marks to the solved plot rectangle. Defaults to true. */ clip?: boolean; color?: ChartColorOptions; focus?: ChartFocusMode; tooltip?: ChartTooltip; maxFocusDistance?: number; } export type ChartSpecBuilder = (context: ChartBuildContext) => ChartSpec; export interface ChartDefinition { chart: ChartSpec | ChartSpecBuilder; } export interface NormalizedStackDatum { data: TDatum; group: ChartKey; series: ChartKey; value: number; proportion: number; } export interface NormalizeStackOptions { group: ChartChannel; series: ChartChannel; value: ChartChannel; } export interface ChartPieDatum { data: TDatum; index: number; key: ChartKey; label: string; value: number; theta1: number; theta2: number; } export interface ChartPieOptions { value: ChartChannel; key?: ChartChannel; label?: ChartChannel; sort?: (a: TDatum, b: TDatum) => number; } export interface ChartBinDatum { key: string; x1: number; x2: number; x: number; count: number; cumulative: number; rows: readonly TDatum[]; } export interface ChartBinOptions { value: ChartChannel; thresholds?: number | readonly number[]; } export interface ChartDensityDatum { key: string; x: number; density: number; } export interface ChartDensityOptions { value: ChartChannel; samples?: number; bandwidth?: number; } export declare function defineChart(chart: ChartSpec | ChartSpecBuilder): ChartDefinition; /** Compose polar marks and guides inside the shared chart scene. */ export declare function polar(options: ChartPolarContainerOptions): ChartMark; export declare function lineY(data: readonly TDatum[], options?: ChartLineYOptions): ChartMark; export declare function areaY(data: readonly TDatum[], options?: ChartAreaYOptions): ChartMark; export declare function barY(data: readonly TDatum[], options?: ChartBarOptions): ChartMark; export declare function barX(data: readonly TDatum[], options?: ChartBarOptions): ChartMark; export declare function boxY(data: readonly TDatum[], options?: ChartBoxYOptions): ChartMark; export declare function dot(data: readonly TDatum[], options?: ChartDotOptions): ChartMark; export declare function ruleX(data: readonly TDatum[], options?: ChartRuleOptions): ChartMark; export declare function ruleY(data: readonly TDatum[], options?: ChartRuleOptions): ChartMark; export declare function bandX(data: readonly TDatum[], options: ChartBandOptions): ChartMark; export declare function bandY(data: readonly TDatum[], options: ChartBandOptions): ChartMark; export declare function rect(data: readonly TDatum[], options: ChartRectOptions): ChartMark; export declare function cell(data: readonly TDatum[], options: ChartCellOptions): ChartMark; export declare function textMark(data: readonly TDatum[], options?: ChartTextOptions): ChartMark; export declare function arcMark(data: readonly TDatum[], options?: ChartArcOptions): ChartMark; export declare function radialLine(data: readonly TDatum[], options?: ChartRadialOptions): ChartMark; export declare function radialArea(data: readonly TDatum[], options?: ChartRadialOptions): ChartMark; export declare function radialDot(data: readonly TDatum[], options?: ChartRadialOptions): ChartMark; export declare function channelValue(datum: TDatum, index: number, data: readonly TDatum[], channel: ChartChannel | undefined): TValue | undefined; export declare function visualValue(datum: TDatum, index: number, data: readonly TDatum[], value: ChartVisual | undefined, fallback: TValue): TValue; export declare function normalizeStack(data: readonly TDatum[], options: NormalizeStackOptions): NormalizedStackDatum[]; export declare function pieLayout(data: readonly TDatum[], options: ChartPieOptions): ChartPieDatum[]; export declare function binX(data: readonly TDatum[], options: ChartBinOptions): ChartBinDatum[]; export declare function cumulativeBins(bins: readonly ChartBinDatum[]): ChartBinDatum[]; export declare function densityX(data: readonly TDatum[], options: ChartDensityOptions): ChartDensityDatum[]; export declare function boxStatistics(values: readonly number[], whisker?: number): { q1: number; median: number; q3: number; lower: number; upper: number; outliers: number[]; } | undefined; export declare function chartValueKey(value: unknown): string;