UNPKG

@visactor/vchart

Version:

charts lib based @visactor/VGrammar

296 lines (295 loc) 9.74 kB
import type { PopTipAttributes } from '@visactor/vrender-components'; import type { DataView } from '@visactor/vdataset'; import type { Cursor } from './cursor'; import type { InterpolateType } from './interpolate'; import type { ScaleType } from './scale'; import type { ShapeType } from './shape'; import type { IPoint } from './coordinate'; import type { IModelMarkAttributeContext } from '../compile/mark/interface'; import type { Datum } from './common'; import type { IPadding } from '@visactor/vutils'; import type { IColorKey } from '../theme/color-scheme/interface'; import type { ITokenKey } from '../theme/token/interface'; import type { IRepeatType, TextAlignType, TextBaselineType, IRichTextAttribute, IGraphicStyle, IColor } from '@visactor/vrender-core'; export interface IVisualSpecBase<D, T> { type: ScaleType; domain: D[]; range: T[]; specified?: { [key: string]: unknown; }; clamp?: boolean; } export interface IVisualSpecStyle<D, T> extends IVisualSpecBase<D, T> { field?: string; } export type IDataDomainSpec = { dataId: string; fields: string[]; }; export interface IVisualSpecScale<D, T> extends Omit<IVisualSpecBase<D, T>, 'domain'> { id: string; domain: IVisualSpecBase<D, T>['domain'] | IDataDomainSpec[]; } export type IVisual<D = any, R = any> = IVisualSpecStyle<D, R> | IVisualScale; export interface IVisualScale { scale: string; field?: string; changeDomain?: 'none' | 'replace' | 'expand'; } export type FunctionType<T> = (datum: Datum, context: IModelMarkAttributeContext, source?: DataView) => T; export type ValueType<T> = T; export type VisualType<T> = ValueType<T> | FunctionType<T> | IVisual<unknown, T>; export type TextureType = 'circle' | 'dimond' | 'rect' | 'vertical-line' | 'horizontal-line' | 'bias-lr' | 'bias-rl' | 'grid'; export type ConvertToMarkStyleSpec<T extends Record<string, any>> = { [key in keyof T]: VisualType<T[key]>; }; export interface IBorder { distance: number | string; stroke?: string | IGradient; strokeOpacity?: number; lineWidth?: number; lineDash?: number[]; lineDashOffset?: number; } export interface ICommonSpec { visible?: boolean; x?: number; y?: number; z?: number; stroke?: string | IGradient | false | (number | boolean)[] | IColorKey | null; strokeOpacity?: number; opacity?: number; lineWidth?: number; lineDash?: number[]; lineDashOffset?: number; cursor?: Cursor; zIndex?: number; angle?: number; anchor?: [number, number]; scaleX?: number; scaleY?: number; scaleCenter?: [number | string, number | string]; alpha?: number; beta?: number; anchor3d?: [number, number]; pickMode?: 'accurate' | 'imprecise' | 'custom'; boundsMode?: 'accurate' | 'imprecise'; pickStrokeBuffer?: number; texture?: TextureType | string; textureColor?: string; textureSize?: number; texturePadding?: number; outerBorder?: IBorder; innerBorder?: IBorder; html?: IMarkHtmlSpec; [key: string]: any; } export interface IFillMarkSpec extends ICommonSpec { fill?: VisualType<string> | IGradient | false | IColorKey; fillOpacity?: number; background?: IColor | HTMLImageElement | HTMLCanvasElement | null; } export type IMarkHtmlSpec = Partial<IGraphicStyle['html']>; export interface ISymbolMarkSpec extends IFillMarkSpec { dx?: number; dy?: number; size?: number | number[]; shape?: ShapeType | string; symbolType?: ShapeType | string; scaleX?: number; scaleY?: number; } export interface ILineLikeMarkSpec extends IFillMarkSpec { curveType?: InterpolateType; defined?: boolean; } export interface IAreaMarkSpec extends ILineLikeMarkSpec { x1?: number; y1?: number; orient?: 'horizontal' | 'vertical'; } export interface ILineMarkSpec extends ILineLikeMarkSpec { lineCap?: LineStrokeCap; lineJoin?: LineStrokeJoin; miterLimit?: number; strokeBoundsBuffer?: number; } export interface IRuleMarkSpec extends ILineMarkSpec { x1?: number; y1?: number; } export interface ITextMarkSpec extends IFillMarkSpec { text?: string | number | string[] | number[]; dx?: number; dy?: number; fontSize?: number | ITokenKey; textAlign?: TextAlign; textBaseline?: TextBaseLine; fontFamily?: string; fontWeight?: FontWeight; fontStyle?: FontStyle; maxLineWidth?: number; ellipsis?: string; suffixPosition?: 'start' | 'end' | 'middle'; underline?: boolean; underlineDash?: number[]; underlineOffset?: number; lineThrough?: boolean; lineHeight?: number | string | ITokenKey; poptip?: PopTipAttributes; direction?: 'horizontal' | 'vertical'; wordBreak?: 'break-word' | 'break-all' | 'keep-all'; heightLimit?: number; lineClamp?: number; whiteSpace?: 'normal' | 'no-wrap'; } export type IRichTextMarkSpec = IRichTextAttribute & IFillMarkSpec & { type: 'rich'; text: IRichTextAttribute['textConfig']; }; export type IComposedTextMarkSpec = ITextMarkSpec | IRichTextMarkSpec; export type IPositionedTextMarkSpec = Omit<ITextMarkSpec, 'align' | 'textAlign' | 'baseline' | 'textBaseline'>; export interface IRectMarkSpec extends IFillMarkSpec { cornerRadius?: number | number[]; width?: number; height?: number; x1?: number; y1?: number; } export interface IBoxPlotMarkSpec extends ICommonSpec { lineWidth?: number; boxWidth?: number; shaftWidth?: number; shaftShape?: BoxPlotShaftShape; boxFill?: string; shaftFillOpacity?: number; min?: (datum: Datum) => number; q1?: (datum: Datum) => number; median?: (datum: Datum) => number; q3?: (datum: Datum) => number; max?: (datum: Datum) => number; } export interface IRippleMarkSpec extends ICommonSpec { ripple?: number; size?: number; } export interface ILiquidMarkSpec extends ICommonSpec { wave?: number; } export interface ILiquidOutlineSpec extends ISymbolMarkSpec { lineWidth: number; } export interface IOutlierMarkSpec { fill?: string; size?: number; } export interface IPathMarkSpec extends IFillMarkSpec { path?: string; smoothScale?: boolean; } export interface ILinkPathMarkSpec extends IFillMarkSpec { x0?: number; y0?: number; x1?: number; y1?: number; thickness?: number; curvature?: number; round?: boolean; ratio?: number; align?: 'start' | 'end' | 'center'; pathType?: 'line' | 'smooth' | 'polyline'; endArrow?: boolean; startArrow?: boolean; backgroundStyle?: any; direction?: 'horizontal' | 'vertical' | 'LR' | 'RL' | 'TB' | 'BL' | 'radial'; } export interface IArcMarkSpec extends IFillMarkSpec { startAngle?: number; endAngle?: number; padAngle?: number; outerRadius?: number; innerRadius?: number; cornerRadius?: number; innerPadding?: number; outerPadding?: number; centerOffset?: number; cap?: boolean | [boolean, boolean]; autoCapConical?: boolean; } export interface ICellMarkSpec extends ISymbolMarkSpec { padding?: number | number[] | IPadding; } export interface IGroupMarkSpec extends IFillMarkSpec { clip?: boolean; width?: number; height?: number; cornerRadius?: number | number[]; } export interface IPolygonMarkSpec extends ICommonSpec, IFillMarkSpec { points?: IPoint[]; cornerRadius?: number | number[]; scaleX?: number; scaleY?: number; } export type RepeatType = 'no-repeat' | 'repeat-x' | 'repeat-y' | 'repeat'; export type RepeatXYType = 'no-repeat' | 'repeat' | 'stretch'; export type ImageOriginType = 'top' | 'bottom'; export type GradientPropValue<T> = ValueType<T> | FunctionType<T>; export type GradientStop = { offset: GradientPropValue<number>; color?: GradientPropValue<string>; opacity?: number; }; export interface IGradientLinear { x0?: GradientPropValue<number>; y0?: GradientPropValue<number>; x1?: GradientPropValue<number>; y1?: GradientPropValue<number>; stops: GradientStop[]; gradient: 'linear'; } export interface IGradientRadial { r0?: GradientPropValue<number>; x0?: GradientPropValue<number>; y0?: GradientPropValue<number>; x1?: GradientPropValue<number>; y1?: GradientPropValue<number>; r1?: GradientPropValue<number>; stops: GradientStop[]; gradient: 'radial'; } export interface IGradientConical { x?: GradientPropValue<number>; y?: GradientPropValue<number>; startAngle?: GradientPropValue<number>; endAngle?: GradientPropValue<number>; stops: GradientStop[]; gradient: 'conical'; } export type GradientType = 'linear' | 'radial' | 'conical'; export type IGradient = IGradientLinear | IGradientRadial | IGradientConical; export type LineStrokeCap = 'butt' | 'round' | 'square'; export type LineStrokeJoin = 'arcs' | 'bevel' | 'miter' | 'miter-clip' | 'round'; export type BoxPlotShaftShape = 'line' | 'bar'; export interface IThresholdStyle extends IVisualSpecStyle<number, string> { domain: number[]; field: string; range: string[]; type: 'threshold'; } export interface IUnknownMarkSpec extends ICommonSpec { [key: string]: unknown; } export interface IImageMarkSpec extends IFillMarkSpec { cornerRadius?: number | number[]; width?: number; height?: number; repeatX?: IRepeatType; repeatY?: IRepeatType; image?: string | HTMLImageElement | HTMLCanvasElement; } export type TextAlign = TextAlignType; export type TextBaseLine = TextBaselineType; export type FontStyle = 'normal' | 'italic' | 'oblique' | string; export type FontWeight = 'normal' | 'bold' | 'lighter' | 'bolder' | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900;