import { type AgFunnelSeriesStyle, type SelectionState, _ModuleSupport } from 'ag-charts-community'; import type { DomainWithMetadata, DynamicContext, NormalisedTextOrSegments, Point, RequireOptional } from 'ag-charts-core'; import { ChartAxisDirection } from 'ag-charts-core'; import type { AgNumericValue } from 'ag-charts-types'; import type { BaseFunnelProperties } from './baseFunnelSeriesProperties'; import { FunnelConnector } from './funnelConnector'; export type Bounds = { x: number; y: number; width: number; height: number; }; export type FunnelNodeLabelDatum = Readonly & { datumIndex: number; text: NormalisedTextOrSegments; textAlign: CanvasTextAlign; textBaseline: CanvasTextBaseline; datum: any; series: _ModuleSupport.CartesianSeriesNodeDatum['series']; visible: boolean; }; export interface FunnelNodeDatum extends _ModuleSupport.CartesianSeriesNodeDatum, Readonly { readonly index: number; readonly width: number; readonly height: number; readonly label: FunnelNodeLabelDatum | undefined; readonly visible: boolean; readonly crisp: boolean; readonly opacity?: number; readonly clipBBox?: _ModuleSupport.BBox; } interface FunnelConnectorDatum { readonly datum: FunnelNodeDatum; readonly datumIndex: number; readonly x0: number; readonly y0: number; readonly x1: number; readonly y1: number; readonly x2: number; readonly y2: number; readonly x3: number; readonly y3: number; readonly opacity: number; } interface FunnelContext extends _ModuleSupport.AbstractBarSeriesNodeDataContext { connectorData: FunnelConnectorDatum[]; } /** * Base type interface for funnel series types. * Constrains datum, label, context, and properties types while leaving node and options open for subclasses. */ export interface BaseFunnelSeriesTypes extends _ModuleSupport.AbstractBarSeriesTypes { readonly node: _ModuleSupport.QuadtreeCompatibleNode; readonly properties: BaseFunnelProperties; readonly datum: FunnelNodeDatum; readonly label: FunnelNodeLabelDatum; readonly context: FunnelContext; } export interface FunnelAnimationData> extends _ModuleSupport.CartesianAnimationData { } declare class FunnelSeriesNodeEvent extends _ModuleSupport.SeriesNodeEvent { readonly xKey?: string; readonly yKey?: string; constructor(type: TEvent, nativeEvent: Event, datum: FunnelNodeDatum, series: BaseFunnelSeries, selectionState: SelectionState | undefined); } export declare abstract class BaseFunnelSeries extends _ModuleSupport.AbstractBarSeries { protected readonly NodeEvent: typeof FunnelSeriesNodeEvent; protected readonly connectorNodeGroup: _ModuleSupport.Group; protected connectorSelection: _ModuleSupport.Selection>; get pickModeAxis(): "main-category"; constructor({ moduleCtx, animationResetFns, }: { moduleCtx: DynamicContext<_ModuleSupport.ChartRegistry>; animationResetFns: { datum: (node: _ModuleSupport.NodeOf, datum: FunnelNodeDatum) => _ModuleSupport.AnimationValue & Partial<_ModuleSupport.NodeOf>; }; }); setZIndex(zIndex: number): boolean; protected isVertical(): boolean; protected abstract connectorEnabled(): boolean; protected abstract connectorStyle(index: number): RequireOptional & { opacity: number; }; private connectionFactory; getKeyAxis(direction: ChartAxisDirection): string | undefined; processData(dataController: _ModuleSupport.DataController): Promise; getSeriesDomain(direction: ChartAxisDirection): DomainWithMetadata; getSeriesRange(_direction: ChartAxisDirection, _visibleRange: [any, any]): [number, number]; createNodeData(): FunnelContext | undefined; protected resolveItemId(datum: unknown, datumIndex: number): NonNullable; protected abstract getItemStyle(_: Partial, _isHighlight: boolean): RequireOptional; protected abstract createLabelData({ datumIndex, rect, yDatum, datum, }: { datumIndex: number; rect: Bounds; barAlongX: boolean; yDatum: AgNumericValue; datum: any; visible: boolean; }): FunnelNodeLabelDatum | undefined; protected updateNodes(seriesHighlighted: boolean, nodeRefresh: boolean): void; protected updateDatumSelection(opts: { nodeData: FunnelNodeDatum[]; datumSelection: _ModuleSupport.Selection>; }): _ModuleSupport.Selection>; private updateConnectorSelection; private updateConnectorNodes; protected updateLabelSelection(opts: { labelData: FunnelNodeLabelDatum[]; labelSelection: FunnelAnimationData<_ModuleSupport.NodeOf>['labelSelection']; }): _ModuleSupport.Selection>; protected updateLabelNodes(opts: { labelSelection: _ModuleSupport.Selection>; isHighlight?: boolean; }): void; protected getHighlightLabelData(_labelData: FunnelNodeLabelDatum[], highlightedItem: FunnelNodeDatum): FunnelNodeLabelDatum[] | undefined; protected abstract tooltipStyle(datum: any, datumIndex: number): Required; getTooltipContent(datumIndex: number): _ModuleSupport.TooltipContent | undefined; protected resetAllAnimation(data: _ModuleSupport.CartesianAnimationData, FunnelNodeLabelDatum, FunnelContext>): void; animateEmptyUpdateReady({ labelSelection }: FunnelAnimationData<_ModuleSupport.NodeOf>): void; animateWaitingUpdateReady(data: FunnelAnimationData<_ModuleSupport.NodeOf>): void; private getDatumId; protected isLabelEnabled(): boolean; protected computeFocusBounds({ datumIndex }: _ModuleSupport.PickFocusInputs): _ModuleSupport.BBox | undefined; private legendItemSymbol; getLegendData(legendType: _ModuleSupport.ChartLegendType): _ModuleSupport.CategoryLegendDatum[]; protected hasItemStylers(): boolean; } export {};