UNPKG

@visactor/vchart

Version:

charts lib based @visactor/VGrammar

124 lines (123 loc) 4.11 kB
import type { ISeriesSpec, DirectionType, IMarkTheme } from '../../typings'; import type { IMarkSpec } from '../../typings/spec/common'; import type { IRectMarkSpec, ILinkPathMarkSpec } from '../../typings/visual'; import type { IAnimationSpec } from '../../animation/spec'; import type { SeriesMarkNameEnum } from '../interface/type'; import type { ILabelSpec } from '../../component/label/interface'; export type SankeyMark = 'node' | 'link' | 'label'; export type SankeyAppearPreset = 'growIn' | 'fadeIn'; export interface ISankeyAnimationParams { direction: DirectionType; growFrom: () => number; } export type ISankeyLabelSpec = ILabelSpec & { position?: 'outside' | 'inside-start' | 'inside-middle' | 'inside-end' | 'left' | 'right'; limit?: number; }; export interface ISankeySeriesSpec extends Omit<ISeriesSpec, 'data'>, IAnimationSpec<SankeyMark, SankeyAppearPreset> { type: 'sankey'; categoryField: string; valueField: string; sourceField?: string; targetField?: string; direction?: DirectionType; nodeAlign?: 'left' | 'right' | 'center' | 'justify' | 'start' | 'end'; crossNodeAlign?: 'start' | 'end' | 'middle' | 'parent'; inverse?: boolean; nodeGap?: number; nodeWidth?: string | number | ((node: SankeyNodeElement) => number); linkWidth?: number | ((link: SankeyLinkElement) => number); minStepWidth?: number; minNodeHeight?: number; minLinkHeight?: number; maxNodeHeight?: number; maxLinkHeight?: number; iterations?: number; nodeKey?: string | number | ((datum: SankeyNodeDatum) => string | number); linkSortBy?: (a: SankeyLinkElement, b: SankeyLinkElement) => number; nodeSortBy?: (a: SankeyNodeElement, b: SankeyNodeElement) => number; setNodeLayer?: (datum: SankeyNodeDatum) => number; dropIsolatedNode?: boolean; nodeHeight?: number | ((node: SankeyNodeElement) => number); linkHeight?: number | ((link: SankeyLinkElement, sourceNode: SankeyNodeElement, sourceNodeHeight: number) => number); equalNodeHeight?: boolean; linkOverlap?: 'start' | 'center' | 'end'; [SeriesMarkNameEnum.node]?: IMarkSpec<IRectMarkSpec>; [SeriesMarkNameEnum.link]?: IMarkSpec<ILinkPathMarkSpec>; emphasis?: { enable: boolean; trigger?: 'click' | 'hover'; effect: 'self' | 'adjacency' | 'related'; }; [SeriesMarkNameEnum.label]?: ISankeyLabelSpec | ISankeyLabelSpec[]; overflow?: 'scroll' | 'hidden' | 'scroll-x' | 'scroll-y'; } export interface SankeyLinkDatum { source: string | number; target: string | number; value?: number; } export interface SankeyNodeDatum { value?: number; } export interface HierarchyNodeDatum { value?: number; children?: HierarchyNodeDatum[]; } export type SankeyData = { nodes?: SankeyNodeDatum[]; links: SankeyLinkDatum[]; } | { nodes: HierarchyNodeDatum[]; }; export interface SankeyNodeElement { key: string | number; index: number; depth: number; endDepth?: number; layer?: number; isLastLayer?: boolean; value: number; datum: SankeyNodeDatum; sourceLinks: SankeyLinkElement[]; targetLinks: SankeyLinkElement[]; x0?: number; y0?: number; x1?: number; y1?: number; } export interface SankeyLinkElement { vertical?: boolean; index: number; source: string | number; target: string | number; value: number; datum: SankeyLinkDatum | SankeyLinkDatum[]; thickness?: number; sourceRect?: { x0: number; x1: number; y0: number; y1: number; }; targetRect?: { x0: number; x1: number; y0: number; y1: number; }; parents?: (string | number)[]; y0?: number; y1?: number; x0?: number; x1?: number; } export type SankeyLayoutResult = { nodes: SankeyNodeElement[]; links: SankeyLinkElement[]; columns: SankeyNodeElement[][]; }[]; export interface ISankeySeriesTheme { [SeriesMarkNameEnum.node]?: IMarkTheme<IRectMarkSpec>; [SeriesMarkNameEnum.link]?: IMarkTheme<ILinkPathMarkSpec>; }