@visactor/vtable
Version:
canvas table width high performance
129 lines (128 loc) • 4.6 kB
TypeScript
import type { FieldData } from './table-engine';
import type { RectProps } from './common';
import type { BaseTableAPI } from './base-table';
import type { TextAlignType, TextBaselineType } from './style-define';
export interface CustomRenderFunctionArg<TypedTable = BaseTableAPI> {
row: number;
col: number;
table: TypedTable;
value: FieldData;
dataValue: FieldData;
rect?: RectProps;
originCol?: number;
originRow?: number;
forComputation?: boolean;
}
interface baseElement {
elementKey?: string;
x: number | string | ((value: string) => number | string);
y: number | string | ((value: string) => number | string);
dx?: number;
dy?: number;
pickable?: boolean;
cursor?: string;
name?: string;
}
export interface TextElement extends baseElement {
type: 'text';
text: string | ((value: string) => string);
stroke?: string | ((value: string) => string);
fill?: string | ((value: string) => string);
color?: string | ((value: string) => string);
lineWidth?: number;
fontSize?: number | ((value: string) => number);
fontFamily?: string | ((value: string) => string);
fontWeight?: string | number | ((value: string) => string | number);
fontVariant?: string;
fontStyle?: string;
ellipsis?: boolean | string;
maxLineWidth?: number;
textAlign?: TextAlignType;
textBaseline?: TextBaselineType;
lineHeight?: number;
underline?: number;
underlineDash?: number[];
underlineOffset?: number;
lineThrough?: number;
heightLimit?: number;
lineClamp?: number;
width?: number;
height?: number;
background?: {
fill?: string;
expandY?: number;
expandX?: number;
cornerRadius?: number;
};
}
export interface LineElement extends Omit<baseElement, 'x' | 'y'> {
type: 'line';
stroke?: string | ((value: string) => string);
points: {
x: number;
y: number;
}[];
lineWidth?: number;
}
export interface RectElement extends baseElement {
type: 'rect';
width: number | string | ((value: string) => number | string);
height: number | string | ((value: string) => number | string);
stroke?: string | ((value: string) => string);
fill?: string | ((value: string) => string);
radius?: number | string | ((value: string) => number | string);
}
export interface CircleElement extends baseElement {
type: 'circle';
radius: number | string | ((value: string) => number | string);
stroke?: string | ((value: string) => string);
fill?: string | ((value: string) => string);
}
export interface ArcElement extends baseElement {
type: 'arc';
radius: number | string | ((value: string) => number | string);
startAngle?: number | ((value: string) => number);
endAngle?: number | ((value: string) => number);
stroke?: string | ((value: string) => string);
fill?: string | ((value: string) => string);
}
export interface IconElement extends baseElement {
type: 'icon';
svg: string | ((value: string) => string);
width: number | string | ((value: string) => number | string);
height: number | string | ((value: string) => number | string);
hover?: {
x: number | string;
y: number | string;
width: number | string | ((value: string) => number | string);
height: number | string | ((value: string) => number | string);
bgColor: string;
radius?: number;
};
}
export interface ImageElement extends baseElement {
type: 'image';
src: string | ((value: string) => string);
width: number | string | ((value: string) => number | string);
height: number | string | ((value: string) => number | string);
hover?: {
x: number | string;
y: number | string;
width: number | string | ((value: string) => number | string);
height: number | string | ((value: string) => number | string);
bgColor: string;
radius?: number;
};
shape?: 'circle' | 'square';
}
export type ICustomRenderElement = TextElement | RectElement | CircleElement | IconElement | ImageElement | ArcElement | LineElement;
export type ICustomRenderElements = Array<ICustomRenderElement>;
export type ICustomRenderFuc<T = BaseTableAPI> = (args: CustomRenderFunctionArg<T>) => ICustomRenderObj;
export type ICustomRenderObj = {
elements: ICustomRenderElements;
expectedHeight: number;
expectedWidth: number;
renderDefault?: boolean;
};
export type ICustomRender<T = BaseTableAPI> = ICustomRenderFuc<T> | ICustomRenderObj;
export {};