ag-charts-enterprise
Version:
Advanced Charting / Charts supporting Javascript / Typescript / React / Angular / Vue
137 lines (136 loc) • 7.19 kB
TypeScript
import { type AgCandlestickSeriesItemOptions, type AgOhlcSeriesItemOptions, type AgOhlcSeriesItemType, _ModuleSupport } from 'ag-charts-community';
import type { AgOhlcSeriesBaseOptions, SelectionState } from 'ag-charts-community';
import { ChartAxisDirection, type DynamicContext, type FillStrokeMorph, type Normalised } from 'ag-charts-core';
import type { AgNumericValue } from 'ag-charts-types';
import { OhlcBaseNode } from './ohlcNode';
import type { OhlcSeriesBaseProperties } from './ohlcSeriesProperties';
interface OhlcCandleStickSeriesStyle extends AgCandlestickSeriesItemOptions, AgOhlcSeriesItemOptions {
}
/** Post-resolution style: colour refs are resolved to concrete colours before reaching the scene node. */
type NormalisedOhlcCandleStickSeriesStyle = Normalised<OhlcCandleStickSeriesStyle, never, FillStrokeMorph>;
export interface OhlcNodeDatum extends Omit<_ModuleSupport.CartesianSeriesNodeDatum, 'yKey' | 'yValue'> {
readonly itemId?: never;
readonly itemType: AgOhlcSeriesItemType;
readonly openValue: AgNumericValue;
readonly closeValue: AgNumericValue;
readonly highValue?: AgNumericValue;
readonly lowValue?: AgNumericValue;
readonly aggregatedValue: AgNumericValue;
readonly isRising: boolean;
readonly centerX: number;
readonly width: number;
readonly y: number;
readonly height: number;
readonly yOpen: number;
readonly yClose: number;
readonly crisp: boolean;
style?: Required<NormalisedOhlcCandleStickSeriesStyle>;
}
declare class OhlcSeriesNodeEvent<TEvent extends string = _ModuleSupport.SeriesNodeEventTypes> extends _ModuleSupport.SeriesNodeEvent<OhlcNodeDatum, TEvent> {
readonly xKey?: string;
readonly openKey?: string;
readonly closeKey?: string;
readonly highKey?: string;
readonly lowKey?: string;
constructor(type: TEvent, nativeEvent: Event, datum: OhlcNodeDatum, series: OhlcSeriesBase<OhlcSeriesBaseTypes>, selectionState: SelectionState | undefined);
}
interface OhlcSeriesBaseNodeDataContext extends _ModuleSupport.AbstractBarSeriesNodeDataContext<OhlcNodeDatum> {
styles: Record<'up' | 'down', _ModuleSupport.SeriesNodeStyleContext<NormalisedOhlcCandleStickSeriesStyle>>;
}
/**
* Base type interface for OHLC series types.
* Template parameter TNode allows subclasses to specify their node type.
*/
export interface OhlcSeriesBaseTypes extends _ModuleSupport.AbstractBarSeriesTypes {
readonly node: OhlcBaseNode<OhlcNodeDatum>;
readonly options: AgOhlcSeriesBaseOptions;
readonly properties: OhlcSeriesBaseProperties<this['options']>;
readonly datum: OhlcNodeDatum;
readonly label: OhlcNodeDatum;
readonly context: OhlcSeriesBaseNodeDataContext;
}
export declare abstract class OhlcSeriesBase<TTypes extends OhlcSeriesBaseTypes> extends _ModuleSupport.AbstractBarSeries<TTypes> {
protected readonly NodeEvent: typeof OhlcSeriesNodeEvent;
private readonly aggregationManager;
constructor(moduleCtx: DynamicContext<_ModuleSupport.ChartRegistry>);
processData(dataController: _ModuleSupport.DataController): Promise<void>;
private aggregateData;
private estimateTargetRange;
protected createBucketLookupFeature(): _ModuleSupport.BucketLookupFeature;
getSeriesDomain(direction: ChartAxisDirection): import("ag-charts-core").DomainWithMetadata<any>;
getSeriesRange(_direction: ChartAxisDirection, visibleRange: [number, number]): [number, number];
getZoomRangeFittingItems(xVisibleRange: [number, number], yVisibleRange: [number, number] | undefined, minVisibleItems: number): {
x: [number, number];
y: [number, number] | undefined;
} | undefined;
getVisibleItems(xVisibleRange: [number, number], yVisibleRange: [number, number] | undefined, minVisibleItems: number): number;
/**
* Creates shared context for node datum creation/update operations.
* This context is instantiated once and reused across all datum operations
* to minimize memory allocations. Only caches values that are expensive to
* compute - cheap property lookups use `this` directly.
*/
private buildDatumContext;
/**
* Validates and prepares state for a single OHLC datum.
* Mutates ctx.nodeDatumStateScratch with computed values.
* Returns the scratch object if valid, undefined if invalid.
*/
private prepareOhlcNodeDatumState;
/**
* Creates a skeleton OhlcNodeDatum from prepared state.
* Takes pre-computed positioning and state from scratch object.
*/
private createSkeletonNodeDatum;
/**
* Updates an existing OhlcNodeDatum in-place for value-only changes.
* This is more efficient than recreating the entire node when only data values change
* but the structure (insertions/removals) remains the same.
*/
private updateNodeDatum;
/**
* Handles node creation/update - reuses existing nodes when possible for incremental updates.
* This method decides whether to update existing nodes in-place or create new ones.
*/
private upsertNodeDatum;
createNodeData(): {
itemId: string;
nodeData: OhlcNodeDatum[];
labelData: never[];
scales: {
x?: import("ag-charts-core").Scaling | undefined;
y?: import("ag-charts-core").Scaling | undefined;
angle?: import("ag-charts-core").Scaling | undefined;
radius?: import("ag-charts-core").Scaling | undefined;
};
groupScale: import("ag-charts-core").Scaling | undefined;
visible: boolean;
styles: Record<"up" | "down", Record<_ModuleSupport.HighlightState, Required<NormalisedOhlcCandleStickSeriesStyle> & {
opacity: number;
}>>;
} | undefined;
protected isVertical(): boolean;
protected isLabelEnabled(): boolean;
protected resetDatumAnimation(data: _ModuleSupport.CartesianAnimationData<OhlcNodeDatum, TTypes['node'], OhlcNodeDatum, OhlcSeriesBaseNodeDataContext>): void;
protected updateDatumSelection(opts: {
nodeData: OhlcNodeDatum[];
datumSelection: _ModuleSupport.Selection<OhlcNodeDatum, TTypes['node']>;
seriesIdx: number;
}): _ModuleSupport.Selection<OhlcNodeDatum, TTypes["node"]>;
protected updateLabelNodes(_opts: {
labelSelection: _ModuleSupport.Selection<OhlcNodeDatum, _ModuleSupport.Text<OhlcNodeDatum>>;
seriesIdx: number;
}): void;
protected updateLabelSelection(opts: {
labelData: OhlcNodeDatum[];
labelSelection: _ModuleSupport.Selection<OhlcNodeDatum, _ModuleSupport.Text<OhlcNodeDatum>>;
seriesIdx: number;
}): _ModuleSupport.Selection<OhlcNodeDatum, _ModuleSupport.Text<OhlcNodeDatum>>;
protected getItemStyle(datumIndex: number | undefined, isHighlight: boolean, highlightState?: _ModuleSupport.HighlightState, itemType?: 'up' | 'down'): Required<NormalisedOhlcCandleStickSeriesStyle> & {
opacity: number;
};
private makeItemStylerParams;
getTooltipContent(datumIndex: number): _ModuleSupport.TooltipContent | undefined;
computeFocusBounds(opts: _ModuleSupport.PickFocusInputs): _ModuleSupport.BBox | undefined;
}
export {};