Unified style bag for all Family-A series types (ARCHITECTURE.md §6A). Each renderer reads the fields it needs; per-type defaults are filled by the chart-type registry. Keeping one optional-field interface avoids a sprawling discriminated union at the rendering boundary.

interface SeriesStyle {
    areaBottomColor?: string;
    areaTopColor?: string;
    base?: number;
    baseValue?: number;
    bodyVisible?: boolean;
    borderDownColor?: string;
    borderUpColor?: string;
    borderVisible?: boolean;
    bottomColor?: string;
    boxSize?: number;
    closeColor?: string;
    color?: string;
    colorByPreviousClose?: boolean;
    downColor?: string;
    highColor?: string;
    hollow?: boolean;
    lastValueVisible?: boolean;
    lineStyle?: "solid" | "dashed" | "dotted";
    lineWidth?: number;
    lowColor?: string;
    markerRadius?: number;
    markers?: boolean;
    markersOnly?: boolean;
    precision?: number;
    priceLineVisible?: boolean;
    step?: boolean;
    thickColor?: string;
    thinColor?: string;
    title?: string;
    topColor?: string;
    upColor?: string;
    visible?: boolean;
    wickDownColor?: string;
    wickUpColor?: string;
    wickVisible?: boolean;
}

Properties

areaBottomColor?: string
areaTopColor?: string
base?: number
baseValue?: number
bodyVisible?: boolean

Paint candle bodies. Off leaves outline and wick. Default true.

borderDownColor?: string
borderUpColor?: string
borderVisible?: boolean
bottomColor?: string
boxSize?: number

Fallback box size for stacking P&F X/O glyphs. Columns from PointFigureTransform carry their own boxSize, which wins, so set this only for hand-built column data.

closeColor?: string
color?: string
colorByPreviousClose?: boolean

Color bars by close-versus-previous-close instead of close-versus-own-open, which is how most terminals paint a bar. Body, border and wick switch together. Default false.

downColor?: string
highColor?: string

Stroke for the top edge of an HLC area's band. Undefined leaves the edge unstroked, which is how the band has always drawn.

hollow?: boolean
lastValueVisible?: boolean

Show this series' current value as a tag on the price axis. Default true.

Every series on the pane's readout scale gets one, not only the instrument: an indicator overlay, a comparison line, a study on a pane of its own. The instrument's tag is the up/down coloured one that also carries the bar countdown; the rest are drawn in their own plot colour. A series whose current value is not a number draws no tag, so a study that is na right now says nothing rather than showing a stale reading.

lineStyle?: "solid" | "dashed" | "dotted"

Line dash style for line/step/area/HLC series. Default 'solid'.

lineWidth?: number
lowColor?: string

Stroke for the bottom edge of an HLC area's band. See highColor.

markerRadius?: number
markers?: boolean
markersOnly?: boolean

Draw only the markers, with no connecting line (Parabolic SAR, scatter).

precision?: number

Decimal places for every price the scale this series maps to formats: the axis ticks, the last-value tag, the crosshair label and the drawing-tool labels. It overrides the precision the price scale infers from the tick size or the visible range. Undefined is the "Default" entry of the Precision dropdown: keep inferring. Valid range 0 to 8.

It does not reach a legend row: a PaneLegend is handed finished strings, so whoever builds those readings owns their formatting.

priceLineVisible?: boolean

Show the dashed horizontal last-price line across the plot. Default true.

step?: boolean
thickColor?: string

Kagi thick (yang) line color.

thinColor?: string

Kagi thin (yin) line color.

title?: string

Optional label carried with the series (for host-drawn legends).

topColor?: string
upColor?: string
visible?: boolean

Whether the series is drawn and counted in autoscale. Default true.

wickDownColor?: string
wickUpColor?: string
wickVisible?: boolean