API reference

Types

Every TypeScript type Chartlyx re-exports. Import with import type so nothing lands in your bundle at runtime.

ChartContainerProps

ChartContainerProps<T, XS, YS>

The prop shape for <ChartContainer>. Uses a discriminated union so xKey/x and yKey/y are mutually exclusive at the type level.

type XProps<T, XS extends ScaleType> = { xScaleType: XS } & (
  | { xKey: KeysOfType<T, ScaleInput<XS>>; x?: never }
  | { x: (d: T) => ScaleInput<XS>; xKey?: never }
);

type YProps<T, YS extends ScaleType> = { yScaleType: YS } & (
  | { yKey: KeysOfType<T, ScaleInput<YS>>; y?: never }
  | { y: (d: T) => ScaleInput<YS>; yKey?: never }
);

export type ChartContainerProps<
  T,
  XS extends ScaleType = "linear",
  YS extends ScaleType = "linear",
> = {
  data: readonly T[];
  margin?: Partial<Margin>;
  minHeight?: number;
  yDomain?: [number, number];
  children?: React.ReactNode;
} & XProps<T, XS> & YProps<T, YS>;

ChartContextValue

ChartContextValue

The context object exposed by useChartContext. Callers pass a generic T to narrow data.

export interface ChartContextValue {
  data: readonly unknown[];
  xScale: XScale;
  yScale: YScale;
  xAccessor: (d: unknown) => number | Date | string;
  yAccessor: (d: unknown) => number | Date | string;
  width: number;
  height: number;
  innerWidth: number;
  innerHeight: number;
  margin: Margin;
}

PolarChartContainerProps

PolarChartContainerProps<T>

Prop shape for <PolarChartContainer>. Uses a discriminated union that also permits neither valueKey nor value (radar case).

export type PolarChartContainerProps<T> = {
  data: readonly T[];
  padding?: number;
  innerRadius?: number;
  minHeight?: number;
  children?: React.ReactNode;
} & ValueProps<T>;

// ValueProps<T> allows:
//   { valueKey: KeysOfType<T, number>; value?: never }
//   { value: (d: T) => number; valueKey?: never }
//   { valueKey?: never; value?: never }   // radar

PolarChartContextValue

PolarChartContextValue

export interface PolarChartContextValue {
  data: readonly unknown[];
  valueAccessor: (d: unknown) => number;
  width: number;
  height: number;
  cx: number;
  cy: number;
  radius: number;
  innerRadius: number;
  padding: number;
  activeIndex: number | null;
  setActiveIndex: (i: number | null) => void;
}

Shape prop types

All shape prop types are generic over the row type T. Cartesian shapes extend a shared YOverride<T> interface for per-shape y accessor overrides.

export interface LineProps<T = unknown> extends YOverride<T> {
  stroke?: string;
  strokeWidth?: number;
  curve?: CurveType;
  animate?: boolean;
  label?: ShapeLabelRender<T>;
}

export interface AreaProps<T = unknown> extends YOverride<T> {
  fill?: string;
  fillOpacity?: number;
  stroke?: string;
  strokeWidth?: number;
  curve?: CurveType;
  animate?: boolean;
  label?: ShapeLabelRender<T>;
}

export interface BarProps<T = unknown> extends YOverride<T> {
  fill?: string;
  fillOpacity?: number;
  stroke?: string;
  strokeWidth?: number;
  radius?: number;
  baseline?: number;
  animate?: boolean;
  label?: ShapeLabelRender<T>;
}

export interface ScatterProps<T = unknown> extends YOverride<T> {
  fill?: string;
  fillOpacity?: number;
  stroke?: string;
  strokeWidth?: number;
  radius?: number;
  animate?: boolean;
  label?: ShapeLabelRender<T>;
}

export interface StackedBarProps<T = unknown> {
  keys: readonly KeysOfType<T, number>[];
  colors?: readonly string[];
  radius?: number;
  stroke?: string;
  strokeWidth?: number;
  animate?: boolean;
}

export interface StackedAreaProps<T = unknown> {
  keys: readonly KeysOfType<T, number>[];
  colors?: readonly string[];
  curve?: CurveType;
  stroke?: string;
  strokeWidth?: number;
  fillOpacity?: number;
  animate?: boolean;
}

export interface PieProps<T = unknown> {
  colors?: readonly string[];
  stroke?: string;
  strokeWidth?: number;
  label?: PieLabelRender<T>;
}

export interface RadarProps<T = unknown> {
  axes: readonly KeysOfType<T, number>[];
  maxValue?: number;
  fill?: string;
  fillOpacity?: number;
  stroke?: string;
  strokeWidth?: number;
  showPoints?: boolean;
  pointRadius?: number;
  rowIndex?: number;
  colorByIndex?: number;
}

export interface RadarGridProps {
  axesCount: number;
  rings?: number;
  stroke?: string;
  strokeWidth?: number;
  fill?: string;
  shape?: "polygon" | "circle";
}

export interface RadarAxesProps {
  axes: readonly string[];
  stroke?: string;
  strokeWidth?: number;
  labelFill?: string;
  labelFontSize?: number;
  labelOffset?: number;
}

AxisProps

AxisProps<V>

Shared shape between XAxis and YAxis. The generic V narrows the tickFormatter signature based on scale type.

export interface AxisProps<V extends TickValue = TickValue> {
  tickCount?: number;
  tickFormatter?: TickFormatter<V>;
  label?: string;
  labelOffset?: number;
  stroke?: string;
  textFill?: string;
  labelFill?: string;
}

CartesianGridProps

CartesianGridProps

export interface CartesianGridProps {
  horizontal?: boolean;
  vertical?: boolean;
  xTickCount?: number;
  yTickCount?: number;
  stroke?: string;
  strokeWidth?: number;
  strokeOpacity?: number;
  dashArray?: string;
}

TooltipProps · PolarTooltipProps

TooltipProps<T>, PolarTooltipProps<T>

export interface TooltipProps<T = unknown> {
  children: TooltipRender<T>;
  showIndicator?: boolean;
  indicatorStroke?: string;
  indicatorOpacity?: number;
  dotRadius?: number;
  dotFill?: string;
}

export interface PolarTooltipProps<T = unknown> {
  children: PolarTooltipRender<T>;
}

LegendProps · LegendItem

LegendProps, LegendItem

export interface LegendItem {
  label: string;
  color: string;
  shape?: "square" | "circle";
}

export interface LegendProps {
  items: readonly LegendItem[];
  direction?: "row" | "column";
  gap?: number;
  fontSize?: number;
  color?: string;
  chipSize?: number;
}

LinearGradientProps

LinearGradientProps

export interface LinearGradientProps {
  id: string;
  from: string;
  to: string;
  fromOpacity?: number;
  toOpacity?: number;
  direction?: "vertical" | "horizontal";
}

ShapeLabelRender · ShapeLabelRenderProps

ShapeLabelRender<T>, ShapeLabelRenderProps<T>

Signature for per-point label render props on Line, Area, Bar, and Scatter.

export interface ShapeLabelRenderProps<T> {
  x: number;
  y: number;
  datum: T;
  index: number;
}

export type ShapeLabelRender<T> = (
  props: ShapeLabelRenderProps<T>,
) => React.ReactNode;

PieLabelRender · PieLabelRenderProps

PieLabelRender<T>, PieLabelRenderProps<T>

export interface PieLabelRenderProps<T> {
  centroid: [number, number];
  cx: number;
  cy: number;
  startAngle: number;
  endAngle: number;
  datum: T;
  index: number;
}

export type PieLabelRender<T> = (
  props: PieLabelRenderProps<T>,
) => React.ReactNode;

TooltipState · TooltipRender

TooltipState<T>, TooltipRender<T>

export interface TooltipState<T> {
  x: number;
  y: number;
  datum: T;
  index: number;
}

export type TooltipRender<T> = (
  state: TooltipState<T>,
) => React.ReactNode;

PolarTooltipState · PolarTooltipRender

PolarTooltipState<T>, PolarTooltipRender<T>

export interface PolarTooltipState<T> {
  datum: T;
  index: number;
  cx: number;
  cy: number;
  radius: number;
  innerRadius: number;
}

export type PolarTooltipRender<T> = (
  state: PolarTooltipState<T>,
) => React.ReactNode;

TickValue · TickFormatter

TickValue, TickFormatter<V>

export type TickValue = number | Date | string;

export type TickFormatter<V extends TickValue = TickValue> = (
  value: V,
  index: number,
) => string;

CurveType

CurveType

Curve name accepted by Line, Area, and StackedArea.

export type CurveType = "linear" | "monotone" | "step";

ScaleType · ScaleInput

ScaleType, ScaleInput<S>

ScaleInput is a conditional type that maps a scale name to its expected input value type. Powers the discriminated union in ChartContainerProps.

export type ScaleType = "linear" | "time" | "band";

export type ScaleInput<S extends ScaleType> = S extends "linear"
  ? number
  : S extends "time"
  ? Date
  : S extends "band"
  ? string
  : never;

Margin

Margin

export interface Margin {
  top: number;
  right: number;
  bottom: number;
  left: number;
}

KeysOfType

KeysOfType<T, V>

Utility type that filters keyof T down to keys whose values extend V. Used throughout Chartlyx to constrain key props (yKey, valueKey, stack keys, radar axes).

export type KeysOfType<T, V> = {
  [K in keyof T]-?: T[K] extends V ? K : never;
}[keyof T];

// Example:
interface Row { month: string; revenue: number; runningAvg: number }
type NumericKey = KeysOfType<Row, number>;   // "revenue" | "runningAvg"
type StringKey  = KeysOfType<Row, string>;   // "month"