@visactor/vchart 1.13.5 → 1.13.6-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/es5/index.js +1 -1
- package/build/index.es.js +8 -1
- package/build/index.js +8 -1
- package/build/index.min.js +1 -1
- package/build/tsconfig.tsbuildinfo +1 -1
- package/cjs/chart/base/base-chart.js +2 -1
- package/cjs/chart/base/base-chart.js.map +1 -1
- package/cjs/chart/index.js +2 -1
- package/cjs/compile/compilable-base.js +1 -2
- package/cjs/core/index.d.ts +1 -1
- package/cjs/core/index.js +1 -1
- package/cjs/core/index.js.map +1 -1
- package/cjs/core/instance-manager.js +2 -1
- package/cjs/core/util.js +1 -2
- package/cjs/scale/global-scale.js +2 -1
- package/cjs/scale/global-scale.js.map +1 -1
- package/cjs/typings/visual.d.ts +1 -0
- package/cjs/typings/visual.js.map +1 -1
- package/cjs/util/scale.js +1 -1
- package/cjs/util/scale.js.map +1 -1
- package/esm/chart/base/base-chart.js +2 -1
- package/esm/chart/base/base-chart.js.map +1 -1
- package/esm/chart/index.js +2 -1
- package/esm/compile/compilable-base.js +1 -2
- package/esm/core/index.d.ts +1 -1
- package/esm/core/index.js +1 -1
- package/esm/core/index.js.map +1 -1
- package/esm/core/instance-manager.js +2 -1
- package/esm/core/util.js +1 -2
- package/esm/scale/global-scale.js +2 -1
- package/esm/scale/global-scale.js.map +1 -1
- package/esm/typings/visual.d.ts +1 -0
- package/esm/typings/visual.js.map +1 -1
- package/esm/util/scale.js +1 -1
- package/esm/util/scale.js.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/typings/visual.ts"],"names":[],"mappings":"","file":"visual.js","sourcesContent":["import type { PopTipAttributes } from '@visactor/vrender-components';\nimport type { DataView } from '@visactor/vdataset';\nimport type { Cursor } from './cursor';\nimport type { InterpolateType } from './interpolate';\nimport type { ScaleType } from './scale';\nimport type { ShapeType } from './shape';\nimport type { IPoint } from './coordinate';\nimport type { IAttributeOpt, IModelMarkAttributeContext } from '../compile/mark/interface';\nimport type { Datum } from './common';\nimport type { IPadding } from '@visactor/vutils';\nimport type { IColorKey } from '../theme/color-scheme/interface';\nimport type { ITokenKey } from '../theme/token/interface';\nimport type {\n IRepeatType,\n TextAlignType,\n TextBaselineType,\n IRichTextAttribute,\n IGraphicStyle,\n IColor\n} from '@visactor/vrender-core';\n\n// 基础的visual 对应 scale 的属性\nexport interface IVisualSpecBase<D, T> {\n /**\n * type of scale\n */\n type: ScaleType;\n /**\n * will set to scale.domain, it means input of scale\n */\n domain: D[];\n /**\n * will set to scale.range, it means output of scale\n */\n range: T[];\n /**\n * will set to scale.specified if scale support, as a key-value pair matching capability\n * @since 1.1.0\n */\n specified?: { [key: string]: unknown };\n}\n// 用来给用户进行mark.style上的映射配置。所以要配置数据维度\nexport interface IVisualSpecStyle<D, T> extends IVisualSpecBase<D, T> {\n /**\n * 指定映射对应的数据字段\n */\n field?: string;\n}\n\nexport type IDataDomainSpec = {\n /**\n * 数据的id\n */\n dataId: string;\n /**\n * 数据字段\n */\n fields: string[];\n};\n\n// 用来提供给用户进行 scale 配置 所以名字是必选的 对用户配置\nexport interface IVisualSpecScale<D, T> extends Omit<IVisualSpecBase<D, T>, 'domain'> {\n /**\n * scale 的id\n */\n id: string;\n /**\n * 定义域范围\n */\n domain:\n | IVisualSpecBase<D, T>['domain']\n // 使用数据的字段值,如果 scale 是连续的,就取区间,如果是离散的就使用 values 。\n // 不考虑图表内的交互等数据筛选,这里只用原始数据的统计信息\n | IDataDomainSpec[];\n}\n// 对用户配置\nexport type IVisual<D = any, R = any> = IVisualSpecStyle<D, R> | IVisualScale;\n\nexport interface IVisualScale {\n /**\n * 对应 IVisualSpecScale 的用户配置 scale-id\n */\n scale: string;\n /**\n * 指定参与映射的数据字段\n */\n field?: string;\n /**\n * 当用户指定 field 后,用该属性来控制值域。\n * @default 'none'\n */\n changeDomain?: 'none' | 'replace' | 'expand';\n}\n\nexport type FunctionType<T> = (\n datum: Datum,\n context: IModelMarkAttributeContext,\n opt?: IAttributeOpt,\n source?: DataView\n) => T;\nexport type ValueType<T> = T;\nexport type VisualType<T> = ValueType<T> | FunctionType<T> | IVisual<unknown, T>;\n\nexport type TextureType =\n | 'circle'\n | 'dimond'\n | 'rect'\n | 'vertical-line'\n | 'horizontal-line'\n | 'bias-lr'\n | 'bias-rl'\n | 'grid';\n\n/**\n * style格式转换\n */\nexport type ConvertToMarkStyleSpec<T extends Record<string, any>> = {\n [key in keyof T]: VisualType<T[key]>;\n};\n\n/**\n * border\n */\nexport interface IBorder {\n /**\n * 边框离图形边缘的距离\n */\n distance: number | string;\n /**\n * 边框的颜色\n */\n stroke?: string | IGradient;\n /**\n * 边框的透明度\n */\n strokeOpacity?: number;\n /**\n * 边框线的宽度\n */\n lineWidth?: number;\n /**\n * 给边框配置虚线模式。它使用一组值来指定描述模式的线和间隙的交替长度\n */\n lineDash?: number[];\n /**\n * 设置边框的虚线偏移量\n */\n lineDashOffset?: number;\n}\n\nexport interface ICommonSpec {\n /**\n * 图形是否可见\n */\n visible?: boolean;\n /**\n * 图形的x坐标\n */\n x?: number;\n /**\n * 图形的y坐标\n */\n y?: number;\n /**\n * 图形的z坐标,仅适用于3D图表\n */\n z?: number;\n /**\n * 图形的描边颜色。\n * 支持使用 'rgb(255,255,255)','rgba(255,255,255,1)','#fff' 等方式设置为纯色,也支持设置为渐变色描边\n * @todo 隔离主题和 spec 配置\n * IColorKey 类型只适用于主题\n */\n stroke?: string | IGradient | false | (number | boolean)[] | IColorKey;\n /**\n * 描边透明度\n */\n strokeOpacity?: number;\n /**\n * 图形的透明度,既影响描边也影响填充\n */\n opacity?: number;\n /**\n * 图形的描边宽度\n */\n lineWidth?: number;\n /**\n * 给描边配置虚线模式。它使用一组值来指定描述模式的线和间隙的交替长度\n */\n lineDash?: number[];\n /**\n * 设置虚线偏移量的属性\n */\n lineDashOffset?: number;\n /**\n * 设置图形的鼠标样式\n */\n cursor?: Cursor;\n /**\n * 设置图形的层级,主意这个是相对层级,图形引擎绘制的时候,会对相同group下的所有图形根据zIndex进行排序,然后从小到大进行渲染\n */\n zIndex?: number;\n /**\n * 图形的旋转角度\n */\n angle?: number;\n /**\n * 基于AABB的锚点位置,用于简单的定位某些path的位置\n */\n anchor?: [number, number];\n\n /**\n * x方向的缩放比例,默认为1,即不进行缩放\n */\n scaleX?: number;\n /**\n * y方向的缩放比例,默认为1,即不进行缩放\n */\n scaleY?: number;\n /**\n * 图形缩放中心\n * @since 1.4.0\n * 可以配置固定坐标,例如 [100, 100];或者百分比坐标,例如 ['50%', '50%'],代表以图元中心为缩放中心\n * */\n scaleCenter?: [number | string, number | string];\n\n // 3d旋转的属性\n /**\n * x方向的旋转角度\n */\n alpha?: number;\n /**\n * y方向的旋转角度\n */\n beta?: number;\n /**\n * 3d的锚点位置\n */\n anchor3d?: [number, number];\n\n /**\n * 选择模式,精确模式,粗糙模式(包围盒模式),自定义模式\n */\n pickMode?: 'accurate' | 'imprecise' | 'custom';\n /**\n * bounds的计算模式\n */\n boundsMode?: 'accurate' | 'imprecise';\n\n /**\n * 用于扩展描边的拾取范围,为 0 就是默认线宽,正数就加宽,负数就减宽\n * @default 0\n * @since 1.7.3\n */\n pickStrokeBuffer?: number;\n\n // 以下是纹理相关的属性\n /**\n * 纹理的类型\n */\n texture?: TextureType | string;\n /**\n * 纹理的颜色\n */\n textureColor?: string;\n /**\n * 纹理单元的大小\n */\n textureSize?: number; // 纹理大小\n /**\n * 纹理之间空隙的大小\n */\n texturePadding?: number;\n\n /**\n * 外边框,外描边,描边位于图形外侧\n */\n outerBorder?: IBorder;\n /**\n * 内边框,内描边,描边位于图形内侧\n */\n innerBorder?: IBorder;\n /**\n * html 浮层,会将配置的html相关内容,绝对定位到图元的位置\n * @experimental\n * @since 1.10.0\n */\n html?: IMarkHtmlSpec;\n\n [key: string]: any;\n}\n\nexport interface IFillMarkSpec extends ICommonSpec {\n /**\n * 图形的填充颜色\n * @todo 隔离主题和 spec 配置\n * IColorKey 类型只适用于主题\n */\n fill?: VisualType<string> | IGradient | false | IColorKey;\n /**\n * 填充的透明度\n */\n fillOpacity?: number;\n\n /**\n * 图形的背景色,支持纯色、image元素、canvas元素\n */\n background?: IColor | HTMLImageElement | HTMLCanvasElement | null;\n}\n\nexport type IMarkHtmlSpec = Partial<IGraphicStyle['html']>;\n\nexport interface ISymbolMarkSpec extends IFillMarkSpec {\n /**\n * x方向的偏移量\n */\n dx?: number;\n /**\n * y方向的偏移量\n */\n dy?: number;\n /**\n * 大小,相当于外接圆的半径\n */\n size?: number | number[];\n /** 对外声明使用shape,vrender图形属性对应的是shape */\n shape?: ShapeType | string;\n /**\n * 标记的类型\n * FIXME: vrender Symbol接收的图形属性,暂时都申明一下\n * */\n symbolType?: ShapeType | string;\n /**\n * x方向的缩放比例,默认为1,即不进行缩放\n */\n scaleX?: number;\n /**\n * y方向的缩放比例,默认为1,即不进行缩放\n */\n scaleY?: number;\n}\n\n// lineMark 和 areaMark 共同配置\nexport interface ILineLikeMarkSpec extends IFillMarkSpec {\n /**\n * 取消的差值类型,默认为线性插值,也就是普通的折线\n */\n curveType?: InterpolateType;\n /**\n * 设置点是否有效,也就是是否合法\n */\n defined?: boolean;\n}\n\nexport interface IAreaMarkSpec extends ILineLikeMarkSpec {\n /**\n * 面积的x1值\n */\n x1?: number;\n /**\n * 面积的y1值\n */\n y1?: number;\n /**\n * 面积图元的方向,\n * horizontal - 水平方向\n * vertical - 垂直方向\n */\n orient?: 'horizontal' | 'vertical';\n}\n\nexport interface ILineMarkSpec extends ILineLikeMarkSpec {\n /**\n * 指定如何绘制每一条线段末端的属性。有 3 个可能的值,分别是:'butt', 'round' and 'square'。默认值是 butt。\n */\n lineCap?: LineStrokeCap;\n /**\n * 用来设置 2 个长度不为 0 的相连部分(线段、圆弧、曲线)如何连接在一起的属性(长度为 0 的变形部分,其指定的末端和控制点在同一位置,会被忽略)。此属性有 3 个值: 'round', 'bevel' and 'miter'。默认值是 'miter'\n */\n lineJoin?: LineStrokeJoin;\n /**\n * 设置斜接面限制比例的属性。当获取属性值时,会返回当前的值(默认值是 10.0 )。当给属性赋值时,0、负数、 Infinity 和 NaN 都会被忽略;除此之外都会被赋予一个新值。\n */\n miterLimit?: number;\n /**\n * stroke 的有界缓冲区\n */\n strokeBoundsBuffer?: number;\n}\n\nexport interface IRuleMarkSpec extends ILineMarkSpec {\n /**\n * 终点x坐标\n */\n x1?: number;\n /**\n * 终点y坐标\n */\n y1?: number;\n}\n\nexport interface ITextMarkSpec extends IFillMarkSpec {\n /**\n * 文字内容\n */\n text?: string | number | string[] | number[];\n /**\n * x 方向偏移\n */\n dx?: number;\n /**\n * y 方向偏移\n */\n dy?: number;\n /**\n * 字号\n */\n fontSize?: number | ITokenKey;\n /**\n * 文字水平方向的对齐方式\n */\n textAlign?: TextAlign;\n /**\n * 文字竖直方向的对齐方式\n */\n textBaseline?: TextBaseLine;\n /**\n * 字体\n */\n fontFamily?: string;\n /**\n * 字重\n */\n fontWeight?: FontWeight;\n /**\n * 字体样式,是否为斜体等\n */\n fontStyle?: FontStyle;\n /**\n * 文字的最大长度\n */\n maxLineWidth?: number;\n /**\n * 文字超出 maxLineWidth 后的省略符\n */\n ellipsis?: string;\n /**\n * 文本省略的位置,默认尾部省略\n * 1. 'start' 文字首部省略\n * 2. 'middle' 文本中间省略\n * 3. 'end' 文本尾部省略\n * @default 'end'\n * @since 1.7.3\n */\n suffixPosition?: 'start' | 'end' | 'middle';\n /**\n * 下划线\n */\n underline?: boolean;\n /**\n * 下划线的虚线样式\n */\n underlineDash?: number[];\n /**\n * 下划线的虚线偏移量\n */\n underlineOffset?: number;\n /**\n * 中划线\n */\n lineThrough?: boolean;\n /**\n * 行高(1.3.1 版本新增字符串类型表示比例值,如\"150%\")\n * @since 1.3.1\n */\n lineHeight?: number | string | ITokenKey;\n /**\n * poptip 相关配置\n */\n poptip?: PopTipAttributes;\n /**\n * 文本的排布方向,如果需要文本纵向排布,可以配置为 'vertical'\n * @default 'horizontal'\n */\n direction?: 'horizontal' | 'vertical';\n /*\n * 单词断行\n */\n wordBreak?: 'break-word' | 'break-all' | 'keep-all';\n /**\n * 高度限制控制显示内容及省略号\n */\n heightLimit?: number;\n /**\n * 按照行数限制显示内容及省略号\n */\n lineClamp?: number;\n /**\n * 设置如何处理空白字符\n */\n whiteSpace?: 'normal' | 'no-wrap';\n}\n\nexport type IRichTextMarkSpec = IRichTextAttribute &\n IFillMarkSpec & { type: 'rich'; text: IRichTextAttribute['textConfig'] };\n\nexport type IComposedTextMarkSpec = ITextMarkSpec | IRichTextMarkSpec;\n\nexport type IPositionedTextMarkSpec = Omit<ITextMarkSpec, 'align' | 'textAlign' | 'baseline' | 'textBaseline'>;\n\nexport interface IRectMarkSpec extends IFillMarkSpec {\n /**\n * 圆角配置。\n * 1. 如果传入数值,则统一为四个角设置圆角\n * 2. 如果传入数组,则分别为 [上左, 上右, 下右, 下左]\n */\n cornerRadius?: number | number[];\n /**\n * 宽度\n */\n width?: number;\n /**\n * 高度\n */\n height?: number;\n /**\n * x方向终点坐标\n */\n x1?: number;\n /**\n * y方向终点坐标\n */\n\n y1?: number;\n}\n\n// 3d rect,支持length表示长宽高中的长属性(深度属性)\nexport interface IRect3dMarkSpec extends IRectMarkSpec {\n /**\n * 3d柱子的深度\n */\n length?: number;\n}\n\nexport interface IBoxPlotMarkSpec extends ICommonSpec {\n /**\n * box描边宽度\n */\n lineWidth?: number;\n /**\n * box宽度\n */\n boxWidth?: number;\n /**\n * 最大最小值宽度\n */\n shaftWidth?: number;\n /**\n * 中轴线类型\n */\n shaftShape?: BoxPlotShaftShape;\n /**\n * 盒子填充颜色,为空则不填充\n */\n boxFill?: string;\n // /**\n // * 描边颜色\n // */\n // stroke?: string;\n /**\n * 中轴线透明度,仅当shaftType=bar时生效\n */\n shaftFillOpacity?: number;\n /**\n * 最小值\n */\n min?: (datum: Datum) => number;\n /**\n * 25%分位数\n */\n q1?: (datum: Datum) => number;\n /**\n * 中位数\n */\n median?: (datum: Datum) => number;\n /**\n * 75%分位数\n */\n q3?: (datum: Datum) => number;\n /**\n * 最大值\n */\n max?: (datum: Datum) => number;\n}\n\nexport interface IRippleMarkSpec extends ICommonSpec {\n /**\n * 波纹密度ripple\n * ripple 取值范为[0,1]\n */\n ripple?: number;\n /**\n * 水波纹最大半径\n */\n size?: number;\n}\n\nexport interface ILiquidMarkSpec extends ICommonSpec {\n /**\n * 波浪的变化状态,范围为 [0, 1]\n */\n wave?: number;\n}\n\nexport interface ILiquidOutlineSpec extends ISymbolMarkSpec {\n /**\n * 描边的宽度\n */\n lineWidth: number;\n}\n\nexport interface IOutlierMarkSpec {\n /**\n * 异常点填充颜色\n */\n fill?: string;\n /**\n * 异常点大小\n */\n size?: number;\n}\n\nexport interface IPathMarkSpec extends IFillMarkSpec {\n path?: string;\n // TODO: 该属性后续可能会删除,未定\n /**\n * 平滑缩放,不然会发生跳变,在地图交互场景需要配置为true;常规path缩放不需要\n */\n smoothScale?: boolean;\n}\n\nexport interface ILinkPathMarkSpec extends IFillMarkSpec {\n /**\n * 连边起点的x坐标\n */\n x0?: number;\n /**\n * 连边起点的y坐标\n */\n y0?: number;\n /**\n * 连边终点的x坐标\n */\n x1?: number;\n /**\n * 连边终点的y坐标\n */\n y1?: number;\n /**\n * 连边的厚度,也可以理解为宽度\n */\n thickness?: number;\n /**\n * 连边的曲度,决定了连边的弯曲程度,取值范围为0-1,\n * 0表示不弯曲,也就是直线\n * 1表示最大的弯曲度,\n * 默认值为0.5\n */\n curvature?: number;\n /** round all the coordinates */\n round?: boolean;\n /** the ratio of normal style path */\n ratio?: number;\n /**\n * 对齐方式\n */\n align?: 'start' | 'end' | 'center';\n /**\n * 连边的类型\n *\n */\n pathType?: 'line' | 'smooth' | 'polyline';\n /**\n * 是否展示终点的箭头\n */\n endArrow?: boolean;\n /**\n * 是否展示起点的箭头\n */\n startArrow?: boolean;\n /**\n * 背景线的样式,主要用于部分高亮的场景\n */\n backgroundStyle?: any;\n /**\n * 连边的方向\n */\n direction?: 'horizontal' | 'vertical' | 'LR' | 'RL' | 'TB' | 'BL' | 'radial';\n}\n\n/**\n * arc图元的视觉通道配置\n */\nexport interface IArcMarkSpec extends IFillMarkSpec {\n /**\n * 圆弧的开始角度\n */\n startAngle?: number;\n /**\n * 圆弧的结束角度\n */\n endAngle?: number;\n /**\n * 间隙角度;间隔角度会转换为一个在两个相邻的弧之间的确定的线性距离,定义为 padRadius * | padAngle |\n * 这个距离在弧的开始和结束处都是相等的;\n * 间隔角度通常只应用于环形扇区(即当内半径大于 0)\n */\n padAngle?: number;\n\n /**\n * 外径,既外半径\n */\n outerRadius?: number;\n /**\n * 内径,既内半径\n */\n innerRadius?: number;\n /**\n * 圆角\n */\n cornerRadius?: number;\n /**\n * 内边距\n */\n innerPadding?: number;\n /**\n * 外边距\n */\n outerPadding?: number;\n /**\n * arc的中心点偏移距离,一般是通过在交互状态下设置这个属性来实现将扇区移出中心的一个效果\n */\n centerOffset?: number;\n /**\n * arc 的 roundCap 属性,即圆角是否伸出 startAngle 和 endAngle 之外\n */\n cap?: boolean | [boolean, boolean];\n /**\n * arc 在 roundCap 打开且应用环形渐变时是否对 cap 部分生效\n */\n autoCapConical?: boolean;\n}\n\n// 3d arc,有高度配置\nexport interface IArc3dMarkSpec extends IArcMarkSpec {\n /**\n * 3d圆弧的高度\n */\n height?: number;\n}\n\nexport interface ICellMarkSpec extends ISymbolMarkSpec {\n /**\n * 内边距\n */\n padding?: number | number[] | IPadding;\n}\n\nexport interface IGroupMarkSpec extends IFillMarkSpec {\n /**\n * 是否开启裁剪\n */\n clip?: boolean;\n /**\n * 宽度\n */\n width?: number;\n /**\n * 高度\n */\n height?: number;\n /**\n * 圆角配置。\n * 1. 如果传入数值,则统一为四个角设置圆角\n * 2. 如果传入数组,则分别为 [上左, 上右, 下右, 下左]\n */\n cornerRadius?: number | number[];\n}\n\nexport interface IPolygonMarkSpec extends ICommonSpec, IFillMarkSpec {\n /**\n * 顶点坐标\n */\n points?: IPoint[];\n /**\n * 圆角配置,支持数组配置,数组的顺序同组成 polygon 的顺序对应\n */\n cornerRadius?: number | number[];\n /**\n * x方向的缩放比例,默认为1,即不进行缩放\n */\n scaleX?: number;\n /**\n * y方向的缩放比例,默认为1,即不进行缩放\n */\n scaleY?: number;\n}\n\nexport interface IPyramid3dMarkSpec extends IPolygonMarkSpec {\n /**\n * 3d金字塔顶点坐标,注意只能有4个顶点\n */\n points?: IPoint[];\n}\n\n/**\n * ImageFill\n */\nexport type RepeatType = 'no-repeat' | 'repeat-x' | 'repeat-y' | 'repeat';\nexport type RepeatXYType = 'no-repeat' | 'repeat' | 'stretch';\nexport type ImageOriginType = 'top' | 'bottom';\n\n/**\n * gradient\n */\nexport type GradientPropValue<T> = ValueType<T> | FunctionType<T>;\nexport type GradientStop = {\n /**\n * 渐变色的偏移量,0-1的值\n */\n offset: GradientPropValue<number>;\n /**\n * 渐变色的颜色\n */\n color?: GradientPropValue<string>;\n /**\n * 渐变色的透明度\n */\n opacity?: number;\n};\nexport interface IGradientLinear {\n /**\n * 渐变色的起点x坐标,0-1的值,相对于图形包围盒x方向取值的比例值\n */\n x0?: GradientPropValue<number>;\n /**\n * 渐变色的起点y坐标,0-1的值,相对于图形包围盒y方向取值的比例值\n */\n y0?: GradientPropValue<number>;\n /**\n * 渐变色的终点x坐标,0-1的值,相对于图形包围盒x方向取值的比例值\n */\n x1?: GradientPropValue<number>;\n /**\n * 渐变色的终点y坐标,0-1的值,相对于图形包围盒y方向取值的比例值\n */\n y1?: GradientPropValue<number>;\n /**\n * 渐变色的颜色\n */\n stops: GradientStop[];\n /**\n * 渐变色的类型设置为 'linear',即线形渐变\n */\n gradient: 'linear';\n}\n\nexport interface IGradientRadial {\n /**\n * 径向渐变的起点的半径\n */\n r0?: GradientPropValue<number>;\n /**\n * 径向渐变的起点的x坐标\n */\n x0?: GradientPropValue<number>;\n /**\n * 径向渐变的起点的y坐标\n */\n y0?: GradientPropValue<number>;\n /**\n * 径向渐变的终点的x坐标\n */\n x1?: GradientPropValue<number>;\n /**\n * 径向渐变的终点的y坐标\n */\n y1?: GradientPropValue<number>;\n /**\n * 径向渐变的终点的半径\n */\n r1?: GradientPropValue<number>;\n /**\n * 渐变色的颜色\n */\n stops: GradientStop[];\n /**\n * 渐变色的类型设置为 'radial',即径向渐变\n */\n gradient: 'radial';\n}\n\nexport interface IGradientConical {\n /**\n * 锥形渐变的中心点x坐标\n */\n x?: GradientPropValue<number>;\n /**\n * 锥形渐变的中心点y坐标\n */\n y?: GradientPropValue<number>;\n /**\n * 锥形渐变的开始角度\n */\n startAngle?: GradientPropValue<number>;\n /**\n * 锥形渐变的结束角度\n */\n endAngle?: GradientPropValue<number>;\n /**\n * 锥形渐变的颜色\n */\n stops: GradientStop[];\n /**\n * 渐变色的类型设置为 'conical',即锥形渐变\n */\n gradient: 'conical';\n}\n\nexport type GradientType = 'linear' | 'radial' | 'conical';\nexport type IGradient = IGradientLinear | IGradientRadial | IGradientConical;\n\nexport type LineStrokeCap = 'butt' | 'round' | 'square';\nexport type LineStrokeJoin = 'arcs' | 'bevel' | 'miter' | 'miter-clip' | 'round';\n\nexport type BoxPlotShaftShape = 'line' | 'bar';\n/**\n * threshold\n */\nexport interface IThresholdStyle extends IVisualSpecStyle<number, string> {\n domain: number[];\n field: string;\n range: string[];\n type: 'threshold';\n}\n\n// FIXME: For some tool methods that need to use common configuration types\nexport interface IUnknownMarkSpec extends ICommonSpec {\n [key: string]: unknown;\n}\n\nexport interface IImageMarkSpec extends IFillMarkSpec {\n /**\n * 圆角配置。\n * 1. 如果传入数值,则统一为四个角设置圆角\n * 2. 如果传入数组,则分别为 [上左, 上右, 下右, 下左]\n */\n cornerRadius?: number | number[];\n /**\n * 图片的宽度\n */\n width?: number;\n /**\n * 图片的高度\n */\n height?: number;\n /**\n * 当图片的宽度小于 width 时,图片的重复方式\n */\n repeatX?: IRepeatType;\n /**\n * 当图片的高度小于 height 时,图片的重复方式\n */\n repeatY?: IRepeatType;\n /**\n * 设置图片的内容,支持三种类型:\n * 1. string类型,可以是图片资源的路径或者是svg 标签字符串\n * 2. image 元素\n * 3. canvas 元素\n */\n image: string | HTMLImageElement | HTMLCanvasElement;\n}\n\n/**\n * text\n */\nexport type TextAlign = TextAlignType;\nexport type TextBaseLine = TextBaselineType;\nexport type FontStyle = 'normal' | 'italic' | 'oblique' | string;\nexport type FontWeight = 'normal' | 'bold' | 'lighter' | 'bolder' | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900;\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/typings/visual.ts"],"names":[],"mappings":"","file":"visual.js","sourcesContent":["import type { PopTipAttributes } from '@visactor/vrender-components';\nimport type { DataView } from '@visactor/vdataset';\nimport type { Cursor } from './cursor';\nimport type { InterpolateType } from './interpolate';\nimport type { ScaleType } from './scale';\nimport type { ShapeType } from './shape';\nimport type { IPoint } from './coordinate';\nimport type { IAttributeOpt, IModelMarkAttributeContext } from '../compile/mark/interface';\nimport type { Datum } from './common';\nimport type { IPadding } from '@visactor/vutils';\nimport type { IColorKey } from '../theme/color-scheme/interface';\nimport type { ITokenKey } from '../theme/token/interface';\nimport type {\n IRepeatType,\n TextAlignType,\n TextBaselineType,\n IRichTextAttribute,\n IGraphicStyle,\n IColor\n} from '@visactor/vrender-core';\n\n// 基础的visual 对应 scale 的属性\nexport interface IVisualSpecBase<D, T> {\n /**\n * type of scale\n */\n type: ScaleType;\n /**\n * will set to scale.domain, it means input of scale\n */\n domain: D[];\n /**\n * will set to scale.range, it means output of scale\n */\n range: T[];\n /**\n * will set to scale.specified if scale support, as a key-value pair matching capability\n * @since 1.1.0\n */\n specified?: { [key: string]: unknown };\n /**\n * enable clamp in linear scale\n * If clamp is enabled, the return value of the scale is always within the scale’s range.\n * @since 1.13.6\n * @default false\n */\n clamp?: boolean;\n}\n// 用来给用户进行mark.style上的映射配置。所以要配置数据维度\nexport interface IVisualSpecStyle<D, T> extends IVisualSpecBase<D, T> {\n /**\n * 指定映射对应的数据字段\n */\n field?: string;\n}\n\nexport type IDataDomainSpec = {\n /**\n * 数据的id\n */\n dataId: string;\n /**\n * 数据字段\n */\n fields: string[];\n};\n\n// 用来提供给用户进行 scale 配置 所以名字是必选的 对用户配置\nexport interface IVisualSpecScale<D, T> extends Omit<IVisualSpecBase<D, T>, 'domain'> {\n /**\n * scale 的id\n */\n id: string;\n /**\n * 定义域范围\n */\n domain:\n | IVisualSpecBase<D, T>['domain']\n // 使用数据的字段值,如果 scale 是连续的,就取区间,如果是离散的就使用 values 。\n // 不考虑图表内的交互等数据筛选,这里只用原始数据的统计信息\n | IDataDomainSpec[];\n}\n// 对用户配置\nexport type IVisual<D = any, R = any> = IVisualSpecStyle<D, R> | IVisualScale;\n\nexport interface IVisualScale {\n /**\n * 对应 IVisualSpecScale 的用户配置 scale-id\n */\n scale: string;\n /**\n * 指定参与映射的数据字段\n */\n field?: string;\n /**\n * 当用户指定 field 后,用该属性来控制值域。\n * @default 'none'\n */\n changeDomain?: 'none' | 'replace' | 'expand';\n}\n\nexport type FunctionType<T> = (\n datum: Datum,\n context: IModelMarkAttributeContext,\n opt?: IAttributeOpt,\n source?: DataView\n) => T;\nexport type ValueType<T> = T;\nexport type VisualType<T> = ValueType<T> | FunctionType<T> | IVisual<unknown, T>;\n\nexport type TextureType =\n | 'circle'\n | 'dimond'\n | 'rect'\n | 'vertical-line'\n | 'horizontal-line'\n | 'bias-lr'\n | 'bias-rl'\n | 'grid';\n\n/**\n * style格式转换\n */\nexport type ConvertToMarkStyleSpec<T extends Record<string, any>> = {\n [key in keyof T]: VisualType<T[key]>;\n};\n\n/**\n * border\n */\nexport interface IBorder {\n /**\n * 边框离图形边缘的距离\n */\n distance: number | string;\n /**\n * 边框的颜色\n */\n stroke?: string | IGradient;\n /**\n * 边框的透明度\n */\n strokeOpacity?: number;\n /**\n * 边框线的宽度\n */\n lineWidth?: number;\n /**\n * 给边框配置虚线模式。它使用一组值来指定描述模式的线和间隙的交替长度\n */\n lineDash?: number[];\n /**\n * 设置边框的虚线偏移量\n */\n lineDashOffset?: number;\n}\n\nexport interface ICommonSpec {\n /**\n * 图形是否可见\n */\n visible?: boolean;\n /**\n * 图形的x坐标\n */\n x?: number;\n /**\n * 图形的y坐标\n */\n y?: number;\n /**\n * 图形的z坐标,仅适用于3D图表\n */\n z?: number;\n /**\n * 图形的描边颜色。\n * 支持使用 'rgb(255,255,255)','rgba(255,255,255,1)','#fff' 等方式设置为纯色,也支持设置为渐变色描边\n * @todo 隔离主题和 spec 配置\n * IColorKey 类型只适用于主题\n */\n stroke?: string | IGradient | false | (number | boolean)[] | IColorKey;\n /**\n * 描边透明度\n */\n strokeOpacity?: number;\n /**\n * 图形的透明度,既影响描边也影响填充\n */\n opacity?: number;\n /**\n * 图形的描边宽度\n */\n lineWidth?: number;\n /**\n * 给描边配置虚线模式。它使用一组值来指定描述模式的线和间隙的交替长度\n */\n lineDash?: number[];\n /**\n * 设置虚线偏移量的属性\n */\n lineDashOffset?: number;\n /**\n * 设置图形的鼠标样式\n */\n cursor?: Cursor;\n /**\n * 设置图形的层级,主意这个是相对层级,图形引擎绘制的时候,会对相同group下的所有图形根据zIndex进行排序,然后从小到大进行渲染\n */\n zIndex?: number;\n /**\n * 图形的旋转角度\n */\n angle?: number;\n /**\n * 基于AABB的锚点位置,用于简单的定位某些path的位置\n */\n anchor?: [number, number];\n\n /**\n * x方向的缩放比例,默认为1,即不进行缩放\n */\n scaleX?: number;\n /**\n * y方向的缩放比例,默认为1,即不进行缩放\n */\n scaleY?: number;\n /**\n * 图形缩放中心\n * @since 1.4.0\n * 可以配置固定坐标,例如 [100, 100];或者百分比坐标,例如 ['50%', '50%'],代表以图元中心为缩放中心\n * */\n scaleCenter?: [number | string, number | string];\n\n // 3d旋转的属性\n /**\n * x方向的旋转角度\n */\n alpha?: number;\n /**\n * y方向的旋转角度\n */\n beta?: number;\n /**\n * 3d的锚点位置\n */\n anchor3d?: [number, number];\n\n /**\n * 选择模式,精确模式,粗糙模式(包围盒模式),自定义模式\n */\n pickMode?: 'accurate' | 'imprecise' | 'custom';\n /**\n * bounds的计算模式\n */\n boundsMode?: 'accurate' | 'imprecise';\n\n /**\n * 用于扩展描边的拾取范围,为 0 就是默认线宽,正数就加宽,负数就减宽\n * @default 0\n * @since 1.7.3\n */\n pickStrokeBuffer?: number;\n\n // 以下是纹理相关的属性\n /**\n * 纹理的类型\n */\n texture?: TextureType | string;\n /**\n * 纹理的颜色\n */\n textureColor?: string;\n /**\n * 纹理单元的大小\n */\n textureSize?: number; // 纹理大小\n /**\n * 纹理之间空隙的大小\n */\n texturePadding?: number;\n\n /**\n * 外边框,外描边,描边位于图形外侧\n */\n outerBorder?: IBorder;\n /**\n * 内边框,内描边,描边位于图形内侧\n */\n innerBorder?: IBorder;\n /**\n * html 浮层,会将配置的html相关内容,绝对定位到图元的位置\n * @experimental\n * @since 1.10.0\n */\n html?: IMarkHtmlSpec;\n\n [key: string]: any;\n}\n\nexport interface IFillMarkSpec extends ICommonSpec {\n /**\n * 图形的填充颜色\n * @todo 隔离主题和 spec 配置\n * IColorKey 类型只适用于主题\n */\n fill?: VisualType<string> | IGradient | false | IColorKey;\n /**\n * 填充的透明度\n */\n fillOpacity?: number;\n\n /**\n * 图形的背景色,支持纯色、image元素、canvas元素\n */\n background?: IColor | HTMLImageElement | HTMLCanvasElement | null;\n}\n\nexport type IMarkHtmlSpec = Partial<IGraphicStyle['html']>;\n\nexport interface ISymbolMarkSpec extends IFillMarkSpec {\n /**\n * x方向的偏移量\n */\n dx?: number;\n /**\n * y方向的偏移量\n */\n dy?: number;\n /**\n * 大小,相当于外接圆的半径\n */\n size?: number | number[];\n /** 对外声明使用shape,vrender图形属性对应的是shape */\n shape?: ShapeType | string;\n /**\n * 标记的类型\n * FIXME: vrender Symbol接收的图形属性,暂时都申明一下\n * */\n symbolType?: ShapeType | string;\n /**\n * x方向的缩放比例,默认为1,即不进行缩放\n */\n scaleX?: number;\n /**\n * y方向的缩放比例,默认为1,即不进行缩放\n */\n scaleY?: number;\n}\n\n// lineMark 和 areaMark 共同配置\nexport interface ILineLikeMarkSpec extends IFillMarkSpec {\n /**\n * 取消的差值类型,默认为线性插值,也就是普通的折线\n */\n curveType?: InterpolateType;\n /**\n * 设置点是否有效,也就是是否合法\n */\n defined?: boolean;\n}\n\nexport interface IAreaMarkSpec extends ILineLikeMarkSpec {\n /**\n * 面积的x1值\n */\n x1?: number;\n /**\n * 面积的y1值\n */\n y1?: number;\n /**\n * 面积图元的方向,\n * horizontal - 水平方向\n * vertical - 垂直方向\n */\n orient?: 'horizontal' | 'vertical';\n}\n\nexport interface ILineMarkSpec extends ILineLikeMarkSpec {\n /**\n * 指定如何绘制每一条线段末端的属性。有 3 个可能的值,分别是:'butt', 'round' and 'square'。默认值是 butt。\n */\n lineCap?: LineStrokeCap;\n /**\n * 用来设置 2 个长度不为 0 的相连部分(线段、圆弧、曲线)如何连接在一起的属性(长度为 0 的变形部分,其指定的末端和控制点在同一位置,会被忽略)。此属性有 3 个值: 'round', 'bevel' and 'miter'。默认值是 'miter'\n */\n lineJoin?: LineStrokeJoin;\n /**\n * 设置斜接面限制比例的属性。当获取属性值时,会返回当前的值(默认值是 10.0 )。当给属性赋值时,0、负数、 Infinity 和 NaN 都会被忽略;除此之外都会被赋予一个新值。\n */\n miterLimit?: number;\n /**\n * stroke 的有界缓冲区\n */\n strokeBoundsBuffer?: number;\n}\n\nexport interface IRuleMarkSpec extends ILineMarkSpec {\n /**\n * 终点x坐标\n */\n x1?: number;\n /**\n * 终点y坐标\n */\n y1?: number;\n}\n\nexport interface ITextMarkSpec extends IFillMarkSpec {\n /**\n * 文字内容\n */\n text?: string | number | string[] | number[];\n /**\n * x 方向偏移\n */\n dx?: number;\n /**\n * y 方向偏移\n */\n dy?: number;\n /**\n * 字号\n */\n fontSize?: number | ITokenKey;\n /**\n * 文字水平方向的对齐方式\n */\n textAlign?: TextAlign;\n /**\n * 文字竖直方向的对齐方式\n */\n textBaseline?: TextBaseLine;\n /**\n * 字体\n */\n fontFamily?: string;\n /**\n * 字重\n */\n fontWeight?: FontWeight;\n /**\n * 字体样式,是否为斜体等\n */\n fontStyle?: FontStyle;\n /**\n * 文字的最大长度\n */\n maxLineWidth?: number;\n /**\n * 文字超出 maxLineWidth 后的省略符\n */\n ellipsis?: string;\n /**\n * 文本省略的位置,默认尾部省略\n * 1. 'start' 文字首部省略\n * 2. 'middle' 文本中间省略\n * 3. 'end' 文本尾部省略\n * @default 'end'\n * @since 1.7.3\n */\n suffixPosition?: 'start' | 'end' | 'middle';\n /**\n * 下划线\n */\n underline?: boolean;\n /**\n * 下划线的虚线样式\n */\n underlineDash?: number[];\n /**\n * 下划线的虚线偏移量\n */\n underlineOffset?: number;\n /**\n * 中划线\n */\n lineThrough?: boolean;\n /**\n * 行高(1.3.1 版本新增字符串类型表示比例值,如\"150%\")\n * @since 1.3.1\n */\n lineHeight?: number | string | ITokenKey;\n /**\n * poptip 相关配置\n */\n poptip?: PopTipAttributes;\n /**\n * 文本的排布方向,如果需要文本纵向排布,可以配置为 'vertical'\n * @default 'horizontal'\n */\n direction?: 'horizontal' | 'vertical';\n /*\n * 单词断行\n */\n wordBreak?: 'break-word' | 'break-all' | 'keep-all';\n /**\n * 高度限制控制显示内容及省略号\n */\n heightLimit?: number;\n /**\n * 按照行数限制显示内容及省略号\n */\n lineClamp?: number;\n /**\n * 设置如何处理空白字符\n */\n whiteSpace?: 'normal' | 'no-wrap';\n}\n\nexport type IRichTextMarkSpec = IRichTextAttribute &\n IFillMarkSpec & { type: 'rich'; text: IRichTextAttribute['textConfig'] };\n\nexport type IComposedTextMarkSpec = ITextMarkSpec | IRichTextMarkSpec;\n\nexport type IPositionedTextMarkSpec = Omit<ITextMarkSpec, 'align' | 'textAlign' | 'baseline' | 'textBaseline'>;\n\nexport interface IRectMarkSpec extends IFillMarkSpec {\n /**\n * 圆角配置。\n * 1. 如果传入数值,则统一为四个角设置圆角\n * 2. 如果传入数组,则分别为 [上左, 上右, 下右, 下左]\n */\n cornerRadius?: number | number[];\n /**\n * 宽度\n */\n width?: number;\n /**\n * 高度\n */\n height?: number;\n /**\n * x方向终点坐标\n */\n x1?: number;\n /**\n * y方向终点坐标\n */\n\n y1?: number;\n}\n\n// 3d rect,支持length表示长宽高中的长属性(深度属性)\nexport interface IRect3dMarkSpec extends IRectMarkSpec {\n /**\n * 3d柱子的深度\n */\n length?: number;\n}\n\nexport interface IBoxPlotMarkSpec extends ICommonSpec {\n /**\n * box描边宽度\n */\n lineWidth?: number;\n /**\n * box宽度\n */\n boxWidth?: number;\n /**\n * 最大最小值宽度\n */\n shaftWidth?: number;\n /**\n * 中轴线类型\n */\n shaftShape?: BoxPlotShaftShape;\n /**\n * 盒子填充颜色,为空则不填充\n */\n boxFill?: string;\n // /**\n // * 描边颜色\n // */\n // stroke?: string;\n /**\n * 中轴线透明度,仅当shaftType=bar时生效\n */\n shaftFillOpacity?: number;\n /**\n * 最小值\n */\n min?: (datum: Datum) => number;\n /**\n * 25%分位数\n */\n q1?: (datum: Datum) => number;\n /**\n * 中位数\n */\n median?: (datum: Datum) => number;\n /**\n * 75%分位数\n */\n q3?: (datum: Datum) => number;\n /**\n * 最大值\n */\n max?: (datum: Datum) => number;\n}\n\nexport interface IRippleMarkSpec extends ICommonSpec {\n /**\n * 波纹密度ripple\n * ripple 取值范为[0,1]\n */\n ripple?: number;\n /**\n * 水波纹最大半径\n */\n size?: number;\n}\n\nexport interface ILiquidMarkSpec extends ICommonSpec {\n /**\n * 波浪的变化状态,范围为 [0, 1]\n */\n wave?: number;\n}\n\nexport interface ILiquidOutlineSpec extends ISymbolMarkSpec {\n /**\n * 描边的宽度\n */\n lineWidth: number;\n}\n\nexport interface IOutlierMarkSpec {\n /**\n * 异常点填充颜色\n */\n fill?: string;\n /**\n * 异常点大小\n */\n size?: number;\n}\n\nexport interface IPathMarkSpec extends IFillMarkSpec {\n path?: string;\n // TODO: 该属性后续可能会删除,未定\n /**\n * 平滑缩放,不然会发生跳变,在地图交互场景需要配置为true;常规path缩放不需要\n */\n smoothScale?: boolean;\n}\n\nexport interface ILinkPathMarkSpec extends IFillMarkSpec {\n /**\n * 连边起点的x坐标\n */\n x0?: number;\n /**\n * 连边起点的y坐标\n */\n y0?: number;\n /**\n * 连边终点的x坐标\n */\n x1?: number;\n /**\n * 连边终点的y坐标\n */\n y1?: number;\n /**\n * 连边的厚度,也可以理解为宽度\n */\n thickness?: number;\n /**\n * 连边的曲度,决定了连边的弯曲程度,取值范围为0-1,\n * 0表示不弯曲,也就是直线\n * 1表示最大的弯曲度,\n * 默认值为0.5\n */\n curvature?: number;\n /** round all the coordinates */\n round?: boolean;\n /** the ratio of normal style path */\n ratio?: number;\n /**\n * 对齐方式\n */\n align?: 'start' | 'end' | 'center';\n /**\n * 连边的类型\n *\n */\n pathType?: 'line' | 'smooth' | 'polyline';\n /**\n * 是否展示终点的箭头\n */\n endArrow?: boolean;\n /**\n * 是否展示起点的箭头\n */\n startArrow?: boolean;\n /**\n * 背景线的样式,主要用于部分高亮的场景\n */\n backgroundStyle?: any;\n /**\n * 连边的方向\n */\n direction?: 'horizontal' | 'vertical' | 'LR' | 'RL' | 'TB' | 'BL' | 'radial';\n}\n\n/**\n * arc图元的视觉通道配置\n */\nexport interface IArcMarkSpec extends IFillMarkSpec {\n /**\n * 圆弧的开始角度\n */\n startAngle?: number;\n /**\n * 圆弧的结束角度\n */\n endAngle?: number;\n /**\n * 间隙角度;间隔角度会转换为一个在两个相邻的弧之间的确定的线性距离,定义为 padRadius * | padAngle |\n * 这个距离在弧的开始和结束处都是相等的;\n * 间隔角度通常只应用于环形扇区(即当内半径大于 0)\n */\n padAngle?: number;\n\n /**\n * 外径,既外半径\n */\n outerRadius?: number;\n /**\n * 内径,既内半径\n */\n innerRadius?: number;\n /**\n * 圆角\n */\n cornerRadius?: number;\n /**\n * 内边距\n */\n innerPadding?: number;\n /**\n * 外边距\n */\n outerPadding?: number;\n /**\n * arc的中心点偏移距离,一般是通过在交互状态下设置这个属性来实现将扇区移出中心的一个效果\n */\n centerOffset?: number;\n /**\n * arc 的 roundCap 属性,即圆角是否伸出 startAngle 和 endAngle 之外\n */\n cap?: boolean | [boolean, boolean];\n /**\n * arc 在 roundCap 打开且应用环形渐变时是否对 cap 部分生效\n */\n autoCapConical?: boolean;\n}\n\n// 3d arc,有高度配置\nexport interface IArc3dMarkSpec extends IArcMarkSpec {\n /**\n * 3d圆弧的高度\n */\n height?: number;\n}\n\nexport interface ICellMarkSpec extends ISymbolMarkSpec {\n /**\n * 内边距\n */\n padding?: number | number[] | IPadding;\n}\n\nexport interface IGroupMarkSpec extends IFillMarkSpec {\n /**\n * 是否开启裁剪\n */\n clip?: boolean;\n /**\n * 宽度\n */\n width?: number;\n /**\n * 高度\n */\n height?: number;\n /**\n * 圆角配置。\n * 1. 如果传入数值,则统一为四个角设置圆角\n * 2. 如果传入数组,则分别为 [上左, 上右, 下右, 下左]\n */\n cornerRadius?: number | number[];\n}\n\nexport interface IPolygonMarkSpec extends ICommonSpec, IFillMarkSpec {\n /**\n * 顶点坐标\n */\n points?: IPoint[];\n /**\n * 圆角配置,支持数组配置,数组的顺序同组成 polygon 的顺序对应\n */\n cornerRadius?: number | number[];\n /**\n * x方向的缩放比例,默认为1,即不进行缩放\n */\n scaleX?: number;\n /**\n * y方向的缩放比例,默认为1,即不进行缩放\n */\n scaleY?: number;\n}\n\nexport interface IPyramid3dMarkSpec extends IPolygonMarkSpec {\n /**\n * 3d金字塔顶点坐标,注意只能有4个顶点\n */\n points?: IPoint[];\n}\n\n/**\n * ImageFill\n */\nexport type RepeatType = 'no-repeat' | 'repeat-x' | 'repeat-y' | 'repeat';\nexport type RepeatXYType = 'no-repeat' | 'repeat' | 'stretch';\nexport type ImageOriginType = 'top' | 'bottom';\n\n/**\n * gradient\n */\nexport type GradientPropValue<T> = ValueType<T> | FunctionType<T>;\nexport type GradientStop = {\n /**\n * 渐变色的偏移量,0-1的值\n */\n offset: GradientPropValue<number>;\n /**\n * 渐变色的颜色\n */\n color?: GradientPropValue<string>;\n /**\n * 渐变色的透明度\n */\n opacity?: number;\n};\nexport interface IGradientLinear {\n /**\n * 渐变色的起点x坐标,0-1的值,相对于图形包围盒x方向取值的比例值\n */\n x0?: GradientPropValue<number>;\n /**\n * 渐变色的起点y坐标,0-1的值,相对于图形包围盒y方向取值的比例值\n */\n y0?: GradientPropValue<number>;\n /**\n * 渐变色的终点x坐标,0-1的值,相对于图形包围盒x方向取值的比例值\n */\n x1?: GradientPropValue<number>;\n /**\n * 渐变色的终点y坐标,0-1的值,相对于图形包围盒y方向取值的比例值\n */\n y1?: GradientPropValue<number>;\n /**\n * 渐变色的颜色\n */\n stops: GradientStop[];\n /**\n * 渐变色的类型设置为 'linear',即线形渐变\n */\n gradient: 'linear';\n}\n\nexport interface IGradientRadial {\n /**\n * 径向渐变的起点的半径\n */\n r0?: GradientPropValue<number>;\n /**\n * 径向渐变的起点的x坐标\n */\n x0?: GradientPropValue<number>;\n /**\n * 径向渐变的起点的y坐标\n */\n y0?: GradientPropValue<number>;\n /**\n * 径向渐变的终点的x坐标\n */\n x1?: GradientPropValue<number>;\n /**\n * 径向渐变的终点的y坐标\n */\n y1?: GradientPropValue<number>;\n /**\n * 径向渐变的终点的半径\n */\n r1?: GradientPropValue<number>;\n /**\n * 渐变色的颜色\n */\n stops: GradientStop[];\n /**\n * 渐变色的类型设置为 'radial',即径向渐变\n */\n gradient: 'radial';\n}\n\nexport interface IGradientConical {\n /**\n * 锥形渐变的中心点x坐标\n */\n x?: GradientPropValue<number>;\n /**\n * 锥形渐变的中心点y坐标\n */\n y?: GradientPropValue<number>;\n /**\n * 锥形渐变的开始角度\n */\n startAngle?: GradientPropValue<number>;\n /**\n * 锥形渐变的结束角度\n */\n endAngle?: GradientPropValue<number>;\n /**\n * 锥形渐变的颜色\n */\n stops: GradientStop[];\n /**\n * 渐变色的类型设置为 'conical',即锥形渐变\n */\n gradient: 'conical';\n}\n\nexport type GradientType = 'linear' | 'radial' | 'conical';\nexport type IGradient = IGradientLinear | IGradientRadial | IGradientConical;\n\nexport type LineStrokeCap = 'butt' | 'round' | 'square';\nexport type LineStrokeJoin = 'arcs' | 'bevel' | 'miter' | 'miter-clip' | 'round';\n\nexport type BoxPlotShaftShape = 'line' | 'bar';\n/**\n * threshold\n */\nexport interface IThresholdStyle extends IVisualSpecStyle<number, string> {\n domain: number[];\n field: string;\n range: string[];\n type: 'threshold';\n}\n\n// FIXME: For some tool methods that need to use common configuration types\nexport interface IUnknownMarkSpec extends ICommonSpec {\n [key: string]: unknown;\n}\n\nexport interface IImageMarkSpec extends IFillMarkSpec {\n /**\n * 圆角配置。\n * 1. 如果传入数值,则统一为四个角设置圆角\n * 2. 如果传入数组,则分别为 [上左, 上右, 下右, 下左]\n */\n cornerRadius?: number | number[];\n /**\n * 图片的宽度\n */\n width?: number;\n /**\n * 图片的高度\n */\n height?: number;\n /**\n * 当图片的宽度小于 width 时,图片的重复方式\n */\n repeatX?: IRepeatType;\n /**\n * 当图片的高度小于 height 时,图片的重复方式\n */\n repeatY?: IRepeatType;\n /**\n * 设置图片的内容,支持三种类型:\n * 1. string类型,可以是图片资源的路径或者是svg 标签字符串\n * 2. image 元素\n * 3. canvas 元素\n */\n image: string | HTMLImageElement | HTMLCanvasElement;\n}\n\n/**\n * text\n */\nexport type TextAlign = TextAlignType;\nexport type TextBaseLine = TextBaselineType;\nexport type FontStyle = 'normal' | 'italic' | 'oblique' | string;\nexport type FontWeight = 'normal' | 'bold' | 'lighter' | 'bolder' | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900;\n"]}
|
package/cjs/util/scale.js
CHANGED
|
@@ -26,7 +26,7 @@ function createScaleWithSpec(spec, context) {
|
|
|
26
26
|
|
|
27
27
|
function initScaleWithSpec(scale, spec) {
|
|
28
28
|
scale && spec && (spec.domain && scale.domain(spec.domain), spec.range && scale.range(spec.range),
|
|
29
|
-
spec.specified && scale.specified && scale.specified(spec.specified));
|
|
29
|
+
spec.specified && scale.specified && scale.specified(spec.specified), spec.clamp && scale.clamp && scale.clamp(spec.clamp));
|
|
30
30
|
}
|
|
31
31
|
|
|
32
32
|
function valueInScaleRange(v, s, useWholeRange) {
|
package/cjs/util/scale.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/util/scale.ts"],"names":[],"mappings":"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","file":"scale.js","sourcesContent":["/**\n * @description Scale 相关的工具函数\n */\nimport { isString, isValid } from '@visactor/vutils';\nimport type { IGlobalScale } from '../scale/interface';\nimport type { IBaseScale } from '@visactor/vscale';\n// eslint-disable-next-line no-duplicate-imports\nimport { BandScale, LinearScale, OrdinalScale, PointScale, ThresholdScale } from '@visactor/vscale';\nimport type { IVisual, IVisualSpecBase } from '../typings/visual';\nimport { ColorOrdinalScale } from '../scale/color-ordinal-scale';\n\nconst defaultScaleMap = {\n linear: LinearScale,\n band: BandScale,\n point: PointScale,\n ordinal: OrdinalScale,\n threshold: ThresholdScale,\n colorOrdinal: ColorOrdinalScale\n};\n\nexport function createScale(type: keyof typeof defaultScaleMap): IBaseScale | null {\n const scaleConstructor = defaultScaleMap[type];\n if (scaleConstructor) {\n return new scaleConstructor();\n }\n\n return null;\n}\n\nexport function createScaleWithSpec(\n spec: IVisual<any>,\n context: {\n globalScale: IGlobalScale;\n seriesId: number;\n }\n): IBaseScale | null {\n if ('scale' in spec && spec.scale) {\n if (isString(spec.scale) && context?.globalScale) {\n return context.globalScale.registerMarkAttributeScale(spec, context.seriesId);\n }\n return spec.scale as unknown as IBaseScale;\n }\n const scale = createScale((spec as IVisualSpecBase<any, any>).type);\n if (scale) {\n initScaleWithSpec(scale, spec as IVisualSpecBase<any, any>);\n }\n return scale;\n}\n\n// 需要一个通用的从spec初始化scale的方法,避免在scale属性更新后需要维护多组逻辑\nfunction initScaleWithSpec(scale: IBaseScale, spec: IVisualSpecBase<any, any>) {\n if (!scale || !spec) {\n return;\n }\n\n if (spec.domain) {\n scale.domain(spec.domain);\n }\n\n if (spec.range) {\n scale.range(spec.range);\n }\n\n if (spec.specified && (<OrdinalScale>scale).specified) {\n (<OrdinalScale>scale).specified(spec.specified);\n }\n}\n\n/**\n * value限制在scale range内\n * 对于指标轴: 限制在scale可视范围(scale.range)内, 通常发生在自定义domain的场景中, 防止图元绘制超出画布\n * 对于维度轴: 限制在scale数据范围(scale.wholeRange)内, 通常发生在缩略轴等组件扩大scale区域的场景中, 允许图元超出画布\n * 已知图表范围: 柱状图、条形进度图\n */\nexport function valueInScaleRange(v: number, s?: IBaseScale, useWholeRange?: boolean) {\n if (!s) {\n return v;\n }\n const scaleRange = s.range();\n const range =\n useWholeRange && (s as any)._calculateWholeRange ? (s as any)._calculateWholeRange(scaleRange) : s.range();\n const min = Math.min(range[0], range[range.length - 1]);\n const max = Math.max(range[0], range[range.length - 1]);\n return Math.min(Math.max(min, v), max);\n}\n\nexport function isSpecValueWithScale(specValue: any) {\n return isValid(specValue?.field) && isValid(specValue?.scale);\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/util/scale.ts"],"names":[],"mappings":"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","file":"scale.js","sourcesContent":["/**\n * @description Scale 相关的工具函数\n */\nimport { isString, isValid } from '@visactor/vutils';\nimport type { IGlobalScale } from '../scale/interface';\nimport type { IBaseScale } from '@visactor/vscale';\n// eslint-disable-next-line no-duplicate-imports\nimport { BandScale, LinearScale, OrdinalScale, PointScale, ThresholdScale } from '@visactor/vscale';\nimport type { IVisual, IVisualSpecBase } from '../typings/visual';\nimport { ColorOrdinalScale } from '../scale/color-ordinal-scale';\n\nconst defaultScaleMap = {\n linear: LinearScale,\n band: BandScale,\n point: PointScale,\n ordinal: OrdinalScale,\n threshold: ThresholdScale,\n colorOrdinal: ColorOrdinalScale\n};\n\nexport function createScale(type: keyof typeof defaultScaleMap): IBaseScale | null {\n const scaleConstructor = defaultScaleMap[type];\n if (scaleConstructor) {\n return new scaleConstructor();\n }\n\n return null;\n}\n\nexport function createScaleWithSpec(\n spec: IVisual<any>,\n context: {\n globalScale: IGlobalScale;\n seriesId: number;\n }\n): IBaseScale | null {\n if ('scale' in spec && spec.scale) {\n if (isString(spec.scale) && context?.globalScale) {\n return context.globalScale.registerMarkAttributeScale(spec, context.seriesId);\n }\n return spec.scale as unknown as IBaseScale;\n }\n const scale = createScale((spec as IVisualSpecBase<any, any>).type);\n if (scale) {\n initScaleWithSpec(scale, spec as IVisualSpecBase<any, any>);\n }\n return scale;\n}\n\n// 需要一个通用的从spec初始化scale的方法,避免在scale属性更新后需要维护多组逻辑\nfunction initScaleWithSpec(scale: IBaseScale, spec: IVisualSpecBase<any, any>) {\n if (!scale || !spec) {\n return;\n }\n\n if (spec.domain) {\n scale.domain(spec.domain);\n }\n\n if (spec.range) {\n scale.range(spec.range);\n }\n\n if (spec.specified && (<OrdinalScale>scale).specified) {\n (<OrdinalScale>scale).specified(spec.specified);\n }\n\n if (spec.clamp && (<LinearScale>scale).clamp) {\n (<LinearScale>scale).clamp(spec.clamp);\n }\n}\n\n/**\n * value限制在scale range内\n * 对于指标轴: 限制在scale可视范围(scale.range)内, 通常发生在自定义domain的场景中, 防止图元绘制超出画布\n * 对于维度轴: 限制在scale数据范围(scale.wholeRange)内, 通常发生在缩略轴等组件扩大scale区域的场景中, 允许图元超出画布\n * 已知图表范围: 柱状图、条形进度图\n */\nexport function valueInScaleRange(v: number, s?: IBaseScale, useWholeRange?: boolean) {\n if (!s) {\n return v;\n }\n const scaleRange = s.range();\n const range =\n useWholeRange && (s as any)._calculateWholeRange ? (s as any)._calculateWholeRange(scaleRange) : s.range();\n const min = Math.min(range[0], range[range.length - 1]);\n const max = Math.max(range[0], range[range.length - 1]);\n return Math.min(Math.max(min, v), max);\n}\n\nexport function isSpecValueWithScale(specValue: any) {\n return isValid(specValue?.field) && isValid(specValue?.scale);\n}\n"]}
|
|
@@ -368,7 +368,8 @@ export class BaseChart extends CompilableBase {
|
|
|
368
368
|
Object.prototype.hasOwnProperty.call(tempSpec, "type") && (colorScaleSpec.type = tempSpec.type),
|
|
369
369
|
Object.prototype.hasOwnProperty.call(tempSpec, "domain") && (colorScaleSpec.domain = tempSpec.domain),
|
|
370
370
|
Object.prototype.hasOwnProperty.call(tempSpec, "range") && (colorScaleSpec.range = tempSpec.range),
|
|
371
|
-
Object.prototype.hasOwnProperty.call(tempSpec, "specified") && (colorScaleSpec.specified = tempSpec.specified)
|
|
371
|
+
Object.prototype.hasOwnProperty.call(tempSpec, "specified") && (colorScaleSpec.specified = tempSpec.specified),
|
|
372
|
+
Object.prototype.hasOwnProperty.call(tempSpec, "clamp") && (colorScaleSpec.clamp = tempSpec.clamp);
|
|
372
373
|
}
|
|
373
374
|
}
|
|
374
375
|
return (null === (_a = colorScaleSpec.range) || void 0 === _a ? void 0 : _a.length) || (colorScaleSpec.range = getDataScheme(colorScheme),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/chart/base/base-chart.ts"],"names":[],"mappings":"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","file":"base-chart.js","sourcesContent":["import type { IRegionConstructor } from '../../region/interface';\nimport { ChartData } from '../chart-meta/data';\nimport type { ICrossHair } from '../../component/crosshair/interface/spec';\nimport type { IDimensionInfo } from '../../event/events/dimension/interface';\nimport type {\n Datum,\n IMarkStateSpec,\n IVisual,\n IVisualSpecScale,\n IRegionQuerier,\n MaybeArray,\n IPadding,\n IRect,\n StringOrNumber,\n IChartSpec,\n IDataValues,\n ILayoutRect,\n ILayoutOrientPadding\n} from '../../typings';\nimport type { ILayoutItem, LayoutCallBack } from '../../layout/interface';\nimport { GlobalScale } from '../../scale/global-scale';\nimport type { ILayoutModelState, IModel, IModelOption, IModelSpecInfo, IUpdateSpecResult } from '../../model/interface';\nimport type {\n IChart,\n IChartLayoutOption,\n IChartRenderOption,\n IChartOption,\n IChartEvaluateOption,\n ILayoutParams,\n DimensionIndexOption,\n IChartSpecTransformerOption,\n IChartSpecTransformer\n} from '../interface';\nimport type { ICartesianSeries, ISeries, ISeriesConstructor } from '../../series/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IRegion } from '../../region/interface';\nimport { ComponentTypeEnum } from '../../component/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IComponent, IComponentConstructor } from '../../component/interface';\nimport type { IMark, IRectMark } from '../../mark/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkTypeEnum } from '../../mark/interface';\nimport type { IEvent } from '../../event/interface';\nimport type { DataView } from '@visactor/vdataset';\n// eslint-disable-next-line no-duplicate-imports\nimport type { DataSet } from '@visactor/vdataset';\nimport { Factory } from '../../core/factory';\nimport { Event } from '../../event/event';\nimport { isArray, isValid, createID, calcPadding, normalizeLayoutPaddingSpec, array } from '../../util';\nimport { BaseModel } from '../../model/base-model';\nimport { BaseMark } from '../../mark/base/base-mark';\nimport { DEFAULT_CHART_WIDTH, DEFAULT_CHART_HEIGHT } from '../../constant/base';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IParserOptions } from '@visactor/vdataset';\nimport type { IBoundsLike, Maybe } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { isFunction, isEmpty, isNil, isString, isEqual, pickWithout } from '@visactor/vutils';\nimport { getDataScheme } from '../../theme/color-scheme/util';\nimport type { IElement, IRunningConfig as IMorphConfig, IView } from '@visactor/vgrammar-core';\nimport { CompilableBase } from '../../compile/compilable-base';\nimport type { IStateInfo } from '../../compile/mark/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { STATE_VALUE_ENUM } from '../../compile/mark/interface';\nimport { ChartEvent, VGRAMMAR_HOOK_EVENT } from '../../constant/event';\nimport type { IGlobalScale } from '../../scale/interface';\nimport { DimensionEventEnum } from '../../event/events/dimension';\nimport type { ITooltip } from '../../component/tooltip/interface';\nimport { calculateChartSize, mergeUpdateResult } from '../util';\nimport { isDiscrete } from '@visactor/vscale';\nimport { updateDataViewInData } from '../../data/initialize';\nimport { LayoutZIndex } from '../../constant/layout';\nimport type { IAxis } from '../../component/axis/interface/common';\n\nexport class BaseChart<T extends IChartSpec> extends CompilableBase implements IChart {\n readonly type: string = 'chart';\n readonly seriesType: string;\n readonly transformerConstructor: new (option: IChartSpecTransformerOption) => IChartSpecTransformer;\n\n readonly id: number = createID();\n\n //FIXME: 转换后的 spec 需要声明 ITransformedChartSpec\n protected _spec: T;\n getSpec() {\n return this._spec;\n }\n setSpec(s: T) {\n // TODO 通过spec设置进行图表更新\n this._spec = s;\n }\n\n getOption() {\n return this._option;\n }\n\n protected _regions: IRegion[] = [];\n // 系列\n protected _series: ISeries[] = [];\n // 组件\n protected _components: IComponent[] = [];\n\n // 布局\n protected _layoutFunc: LayoutCallBack;\n protected _layoutRect: IRect = {\n x: 0,\n y: 0,\n width: DEFAULT_CHART_WIDTH,\n height: DEFAULT_CHART_HEIGHT\n };\n getLayoutRect() {\n return this._layoutRect;\n }\n protected _viewRect: ILayoutRect = {\n width: DEFAULT_CHART_WIDTH,\n height: DEFAULT_CHART_HEIGHT\n };\n getViewRect() {\n return this._viewRect;\n }\n protected _viewBox: IBoundsLike = {\n x1: 0,\n y1: 0,\n x2: DEFAULT_CHART_WIDTH,\n y2: DEFAULT_CHART_HEIGHT\n };\n\n protected _layoutTag: boolean = true;\n getLayoutTag() {\n return this._layoutTag;\n }\n setLayoutTag(tag: boolean, morphConfig?: IMorphConfig, renderNextTick: boolean = true): boolean {\n this._layoutTag = tag;\n const compiler = this.getCompiler();\n\n if (compiler?.getVGrammarView()) {\n compiler.getVGrammarView().updateLayoutTag();\n tag && renderNextTick && compiler.renderNextTick(morphConfig);\n }\n return this._layoutTag;\n }\n\n // 模块参数\n protected _modelOption: IModelOption;\n\n // 全局通道\n // protected _globalScale: { [key: string]: IBaseScale } = {};\n protected _globalScale: IGlobalScale;\n\n getGlobalScale() {\n return this._globalScale;\n }\n\n // mark & model 的 id 映射\n protected _idMap: Map<number, IModel | IMark> = new Map();\n\n protected _event: IEvent;\n getEvent() {\n return this._event;\n }\n\n // data\n protected _dataSet: DataSet;\n protected _chartData: ChartData;\n get chartData() {\n return this._chartData;\n }\n\n protected declare _option: IChartOption;\n\n // 模块内的需要动态影像图表的属性\n readonly state: ILayoutModelState = {\n layoutUpdateRank: 1\n };\n\n // stack\n\n padding: IPadding = { top: 0, left: 0, right: 0, bottom: 0 };\n protected _paddingSpec: ILayoutOrientPadding;\n\n protected _canvasRect: ILayoutRect;\n\n // background\n protected _backgroundMark: IRectMark;\n\n constructor(spec: T, option: IChartOption) {\n super(option);\n this._paddingSpec = normalizeLayoutPaddingSpec(spec.padding ?? option.getTheme().padding);\n\n this._event = new Event(option.eventDispatcher, option.mode);\n this._dataSet = option.dataSet;\n this._chartData = new ChartData(this._dataSet);\n this._modelOption = {\n ...option,\n mode: this._option.mode,\n map: this._idMap,\n getChartLayoutRect: () => this._layoutRect,\n getChartViewRect: () => this._viewRect,\n getChart: () => this,\n globalScale: this._globalScale,\n onError: this._option?.onError,\n disableTriggerEvent: this._option?.disableTriggerEvent === true,\n getSeriesData: this._chartData.getSeriesData.bind(this._chartData)\n };\n\n this._spec = spec;\n }\n\n created(transformer: Maybe<IChartSpecTransformer>) {\n // data\n this._chartData.parseData(this._spec.data);\n // scale\n this._createGlobalScale();\n // background\n this._createBackground();\n // 基础内容\n this._createLayout();\n // 基于spec 创建元素。\n // region\n transformer.forEachRegionInSpec(this._spec, this._createRegion.bind(this));\n // series\n transformer.forEachSeriesInSpec(this._spec, this._createSeries.bind(this));\n // components\n transformer.forEachComponentInSpec(this._spec, this._createComponent.bind(this), this._option.getSpecInfo());\n }\n\n init() {\n (this as any)._beforeInit?.();\n // 元素创建完毕后再执行各元素的初始化 方便各元素能获取到其他模块\n this._regions.forEach(r => r.init({}));\n this._series.forEach(s => s.init({}));\n this._components.forEach(c => c.init({ dataSet: this._dataSet }));\n\n // event\n this._initEvent();\n\n (this as any)._initStack?.();\n\n // data flow start\n this.reDataFlow();\n }\n\n reDataFlow() {\n this._series.forEach(s => s.getRawData()?.markRunning());\n this._series.forEach(s => s.fillData());\n this.updateGlobalScaleDomain();\n }\n\n onResize(width: number, height: number, reRender: boolean = true): void {\n const canvasRect = {\n width,\n height\n };\n this._canvasRect = canvasRect;\n this._updateLayoutRect(this._option.viewBox);\n this.setLayoutTag(true, null, reRender);\n }\n\n updateViewBox(viewBox: IBoundsLike, reLayout: boolean) {\n this._option.viewBox = viewBox;\n this._updateLayoutRect(viewBox);\n this.setLayoutTag(true, null, reLayout);\n }\n\n private _createBackground() {\n const bg = this._spec.background;\n if (!bg || typeof bg !== 'object' || isValid(bg.gradient)) {\n return;\n }\n const backgroundStyle = pickWithout(bg, ['x', 'y', 'width', 'height', 'x1', 'y1', 'image']);\n (backgroundStyle as any).background = (bg as any).image;\n\n this._backgroundMark = Factory.createMark(MarkTypeEnum.group, 'chart-background', {\n model: this as any,\n map: this._option.map,\n getCompiler: this.getCompiler,\n globalScale: this._globalScale\n }) as IRectMark;\n this._backgroundMark.created();\n this._backgroundMark.setStyle({\n ...backgroundStyle,\n x: () => this._viewBox.x1,\n y: () => this._viewBox.y1,\n width: () => this._viewBox.x2 - this._viewBox.x1,\n height: () => this._viewBox.y2 - this._viewBox.y1\n });\n this._backgroundMark.setMarkConfig({\n zIndex: LayoutZIndex.SeriesGroup - 2\n });\n }\n\n protected _createRegion(constructor: IRegionConstructor, specInfo: IModelSpecInfo) {\n if (!constructor) {\n return;\n }\n\n const { spec, ...others } = specInfo;\n const region = new constructor(spec, {\n ...this._modelOption,\n ...others\n });\n if (region) {\n region.created();\n this._regions.push(region);\n }\n }\n\n protected _createSeries(constructor: ISeriesConstructor, specInfo: IModelSpecInfo) {\n if (!constructor) {\n return;\n }\n\n const { spec, ...others } = specInfo;\n\n let region: IRegion | undefined;\n if (isValid(spec.regionId)) {\n region = this.getRegionsInUserId(spec.regionId);\n } else if (isValid(spec.regionIndex)) {\n region = this.getRegionsInIndex([spec.regionIndex])[0];\n }\n\n if (!region && !(region = this._regions[0])) {\n return;\n }\n\n const series = new constructor(spec, {\n ...this._modelOption,\n ...others,\n type: spec.type,\n region,\n globalScale: this._globalScale,\n sourceDataList: this._chartData.dataList\n });\n\n if (series) {\n series.created();\n this._series.push(series);\n region.addSeries(series);\n }\n }\n\n getAllSeries = (): ISeries[] => {\n return this._series ?? [];\n };\n\n getSeriesById(id: number): ISeries | undefined {\n return this._series.find(x => x.id === id);\n }\n\n protected _createComponent(constructor: IComponentConstructor, specInfo: IModelSpecInfo) {\n const component = constructor.createComponent(specInfo, {\n ...this._modelOption,\n type: constructor.type,\n getAllRegions: this.getAllRegions,\n getRegionsInIndex: this.getRegionsInIndex,\n getRegionsInIds: this.getRegionsInIds,\n getRegionsInUserIdOrIndex: this.getRegionsInUserIdOrIndex,\n getAllSeries: this.getAllSeries,\n getSeriesInIndex: this.getSeriesInIndex,\n getSeriesInIds: this.getSeriesInIds,\n getSeriesInUserIdOrIndex: this.getSeriesInUserIdOrIndex,\n getAllComponents: this.getComponents,\n getComponentByIndex: this.getComponentByIndex,\n getComponentByUserId: this.getComponentByUserId,\n getComponentsByKey: this.getComponentsByKey,\n getComponentsByType: this.getComponentsByType\n });\n if (!component) {\n return;\n }\n component.created();\n this._components.push(component);\n }\n\n getAllComponents(): IComponent[] {\n return this._components;\n }\n\n getAllModels(): IModel[] {\n return [].concat(this.getAllSeries(), this.getAllComponents(), this.getAllRegions());\n }\n\n getModelInFilter(filter: string | { type: string; index: number } | ((model: IModel) => boolean)) {\n if (isString(filter)) {\n return this.getAllModels().find(m => m.userId === filter);\n } else if (isFunction(filter)) {\n return this.getAllModels().find(m => filter(m));\n }\n let index = 0;\n return this.getAllModels().find(m => {\n if ((m.specKey ?? m.type) === filter.type) {\n if (index === filter.index) {\n return true;\n }\n index++;\n }\n return false;\n });\n }\n\n private _createLayout() {\n this._updateLayoutRect(this._option.viewBox);\n this._initLayoutFunc();\n }\n\n setLayout(layout: LayoutCallBack) {\n // 统一自定义 layout 到 option 中\n this._option.layout = layout;\n this._initLayoutFunc();\n }\n\n /** 可以通过设置 layout = null 来取消自定义布局。启用spec上的布局配置 */\n private _initLayoutFunc() {\n this._layoutFunc = this._option.layout;\n if (!this._layoutFunc) {\n // 判断是否使用3d的layout\n let use3dLayout = false;\n // 查找是否需要使用3d布局模块\n if ((this._spec as any).zField || (this._spec.series && this._spec.series.some((s: any) => s.zField))) {\n use3dLayout = true;\n }\n const constructor = Factory.getLayoutInKey(this._spec.layout?.type ?? (use3dLayout ? 'layout3d' : 'base'));\n if (constructor) {\n const layout = new constructor(this._spec.layout, {\n onError: this._option?.onError\n });\n this._layoutFunc = layout.layoutItems.bind(layout);\n }\n }\n }\n\n layout(params: ILayoutParams): void {\n this._option.performanceHook?.beforeLayoutWithSceneGraph?.();\n if (this.getLayoutTag()) {\n this._event.emit(ChartEvent.layoutStart, { chart: this, vchart: this._option.globalInstance });\n\n this.onLayoutStart(params);\n const elements = this.getLayoutElements();\n this._layoutFunc(this, elements, this._layoutRect, this._viewBox);\n this._event.emit(ChartEvent.afterLayout, { elements, chart: this });\n this.setLayoutTag(false);\n this.onLayoutEnd(params);\n\n this._event.emit(ChartEvent.layoutEnd, { chart: this, vchart: this._option.globalInstance });\n }\n this._option.performanceHook?.afterLayoutWithSceneGraph?.();\n }\n\n // 通知所有需要通知的元素 onLayout 钩子\n onLayoutStart(option: IChartLayoutOption) {\n const elements = this.getAllModels();\n elements.forEach(element => element.onLayoutStart(this._layoutRect, this._viewRect, option));\n }\n\n // 通知所有需要通知的元素 onLayoutEnd 钩子\n onLayoutEnd(option: IChartLayoutOption) {\n const elements = this.getAllModels();\n elements.forEach(element => {\n // series.onLayoutEnd will be called by region model\n if (element.modelType !== 'series') {\n element.onLayoutEnd(option);\n }\n });\n }\n\n onEvaluateEnd(option: IChartEvaluateOption) {\n const elements = [...this._components, ...this._regions, ...this._series];\n elements.forEach(element => element.onEvaluateEnd(option));\n }\n\n getLayoutElements(): ILayoutItem[] {\n return this.getAllModels()\n .map(i => i.layout)\n .filter(i => !!i);\n }\n\n // 区域\n getRegionsInIndex = (index?: number[]): IRegion[] => {\n if (!index || index.length === 0) {\n return [this._regions[0]];\n }\n return this._regions.filter((_r, i) => index.includes(i));\n };\n\n getAllRegions = () => {\n return this._regions;\n };\n\n getRegionsInIds = (ids: number[]): IRegion[] => {\n if (!ids) {\n return [];\n }\n return this._regions.filter(r => ids.includes(r.id));\n };\n\n getRegionsInQuerier = (region?: MaybeArray<IRegionQuerier>) => {\n if (region) {\n return this._regions.filter((r, index) => {\n return array(region).some(\n regionFilter =>\n (isValid(regionFilter.regionId) && regionFilter.regionId === r.userId) || regionFilter.regionIndex === index\n );\n });\n }\n return this._regions;\n };\n\n getRegionsInUserId = (userId: StringOrNumber): IRegion | undefined => {\n if (!userId) {\n return undefined;\n }\n return this._regions.find(r => r.userId === userId);\n };\n\n getRegionsInUserIdOrIndex = (user_ids?: StringOrNumber[], index?: number[]): IRegion[] => {\n const regions = this.getAllRegions();\n return regions.filter(r => {\n if (user_ids?.length) {\n return r.userId && user_ids.includes(r.userId);\n } else if (index?.length) {\n return index.includes(r.getSpecIndex());\n }\n return true;\n });\n };\n\n // 模块\n getComponents = () => {\n return this._components;\n };\n\n // 区域\n getSeriesInIndex = (index?: number[]): ISeries[] => {\n if (!index || index.length === 0) {\n return [this._series[0]];\n }\n return this._series.filter((_r, i) => index.includes(i));\n };\n\n getSeriesInIds = (ids?: number[]): ISeries[] => {\n if (!ids) {\n return [];\n }\n return this._series.filter(r => ids.includes(r.id));\n };\n\n getSeriesInUserId = (userId: StringOrNumber): ISeries | undefined => {\n if (!userId) {\n return undefined;\n }\n return this._series.find(r => r.userId === userId);\n };\n\n getSeriesInUserIdOrIndex = (user_ids?: StringOrNumber[], index?: number[]): ISeries[] => {\n const series = this.getAllSeries();\n return series.filter(s => {\n if (user_ids?.length) {\n return s.userId && user_ids.includes(s.userId);\n } else if (index?.length) {\n return index.includes(s.getSpecIndex());\n }\n return true;\n });\n };\n\n getComponentByIndex = (key: string, index: number) => {\n const components = this._components.filter(c => (c.specKey || c.type) === key);\n if (!components || components.length === 0) {\n return undefined;\n }\n return components[index];\n };\n\n getComponentsByKey = (key: string) => {\n return this._components.filter(c => (c.specKey || c.type) === key);\n };\n\n getComponentByUserId = (userId: StringOrNumber) => {\n const component = this._components.find(s => s.userId === userId);\n if (component) {\n return component;\n }\n return undefined;\n };\n\n getComponentsByType = (type: string) => {\n return this._components.filter(c => c.type === type);\n };\n\n getModelById(id: number): IModel | undefined {\n const model = this._idMap.get(id);\n if (model && model instanceof BaseModel) {\n return model;\n }\n return undefined;\n }\n\n getModelByUserId(userId: StringOrNumber): IModel | undefined {\n // TODO: 考虑通过 map 结构优化获取方式 & 补充所有 model 的寻找方法\n const series = this.getSeriesInUserId(userId);\n if (series) {\n return series;\n }\n const region = this.getRegionsInUserId(userId);\n if (region) {\n return region;\n }\n const component = this.getComponentByUserId(userId);\n if (component) {\n return component;\n }\n return undefined;\n }\n\n getAllMarks(): IMark[] {\n const items = Array.from(this._idMap.values());\n return items.filter(item => item && item instanceof BaseMark) as IMark[];\n }\n\n getMarkById(id: number): IMark | undefined {\n const mark = this._idMap.get(id);\n if (mark && mark instanceof BaseMark) {\n return mark as IMark;\n }\n return undefined;\n }\n\n getMarkByUserName(name: string): IMark[] {\n return this.getAllMarks().filter(m => m.name && m.name === name);\n }\n\n updateData(id: StringOrNumber, data: unknown, updateGlobalScale: boolean = true, options?: IParserOptions) {\n const dv = this._dataSet.getDataView(id as string);\n if (dv) {\n dv.markRunning();\n dv.parseNewData(data, options);\n }\n\n if (updateGlobalScale) {\n this.updateGlobalScaleDomain();\n }\n this.getAllModels().forEach(model => model.onDataUpdate());\n }\n\n updateFullData(data: IDataValues | IDataValues[], updateGlobalScale: boolean = true) {\n array(data).forEach(d => {\n const dv = this._dataSet.getDataView(d.id);\n if (dv) {\n dv.markRunning();\n }\n });\n array(data).forEach(d => {\n const dv = this._dataSet.getDataView(d.id);\n if (dv) {\n updateDataViewInData(dv, d, true);\n }\n });\n if (updateGlobalScale) {\n this.updateGlobalScaleDomain();\n }\n this.getAllModels().forEach(model => model.onDataUpdate());\n }\n\n onRender(option: IChartRenderOption) {\n // do nothing\n }\n\n setCanvasRect(width: number, height: number) {\n this._canvasRect = { width, height };\n }\n\n getCanvasRect(): Omit<IRect, 'x' | 'y'> {\n if (this._canvasRect) {\n return this._canvasRect;\n }\n\n this._canvasRect = calculateChartSize(this._spec, this._option, {\n width: DEFAULT_CHART_WIDTH,\n height: DEFAULT_CHART_HEIGHT\n });\n\n return this._canvasRect;\n }\n\n getSeriesData(id: StringOrNumber | undefined, index: number | undefined): DataView | undefined {\n return this._chartData.getSeriesData(id, index);\n }\n\n private _transformSpecScale() {\n const scales: IChartSpec['scales'] = this._spec.scales ? [...this._spec.scales] : [];\n let colorScaleSpec: IVisualSpecScale<any, any> = scales.find(s => s.id === 'color');\n const colorScheme = this.getColorScheme();\n if (!colorScaleSpec) {\n colorScaleSpec = {\n type: 'ordinal',\n id: 'color',\n domain: null,\n range: null\n };\n scales.push(colorScaleSpec);\n if (this._spec.color) {\n const colorSpec = this._spec.color as string[] | IVisual<string>;\n\n // range array\n if (isArray(colorSpec)) {\n colorScaleSpec.range = colorSpec;\n } else {\n const tempSpec = colorSpec as IVisualSpecScale<any, any>;\n Object.prototype.hasOwnProperty.call(tempSpec, 'type') && (colorScaleSpec.type = tempSpec.type);\n Object.prototype.hasOwnProperty.call(tempSpec, 'domain') && (colorScaleSpec.domain = tempSpec.domain);\n Object.prototype.hasOwnProperty.call(tempSpec, 'range') && (colorScaleSpec.range = tempSpec.range);\n Object.prototype.hasOwnProperty.call(tempSpec, 'specified') &&\n (colorScaleSpec.specified = tempSpec.specified);\n }\n }\n }\n // 如果没有range设置\n // length === 0 就认为是没有配置,用户配置 color: [] 依然认为是无效配置,启用主题色板\n if (!colorScaleSpec.range?.length) {\n colorScaleSpec.range = getDataScheme(colorScheme);\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n colorScaleSpec.rangeTheme = true;\n }\n return scales;\n }\n\n // 全局通道\n private _createGlobalScale() {\n this._globalScale = new GlobalScale(this._transformSpecScale(), this);\n this._modelOption.globalScale = this._globalScale;\n }\n\n updateGlobalScaleDomain() {\n const domainSet = new Set();\n this._series.forEach(s => {\n const keys = s.getSeriesKeys();\n keys && keys.forEach(k => domainSet.add(k));\n });\n // domain\n const domain = Array.from(domainSet);\n // 如果 global scale 当前没有 domain 的话,就使用这个domain\n // 整理了目前会影响全局 scale 的逻辑,但是当前这个节点使用这个逻辑可行\n // 但是考虑到组件也可能会有修改 scale 的逻辑\n // 增加一个属性设置优先级也许是必须的?\n this._globalScale.updateScaleDomain(domain);\n }\n\n updateGlobalScale(result: IUpdateSpecResult) {\n mergeUpdateResult(result, this._globalScale.updateSpec(this._transformSpecScale()));\n }\n\n updateGlobalScaleTheme() {\n const colorSpec = this._globalScale.getScaleSpec('color');\n const colorScheme = this.getColorScheme();\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n if (colorSpec.rangeTheme) {\n colorSpec.range = getDataScheme(colorScheme);\n this._globalScale.getScale('color').range(colorSpec.range);\n }\n }\n\n private _getSpecKeys(spec: T) {\n const ignoreKeys: Record<string, boolean> = { width: true, height: true };\n return Object.keys(spec)\n .filter(key => !ignoreKeys[key])\n .sort();\n }\n\n updateSpec(spec: T) {\n const result = {\n change: false,\n reMake: false,\n reRender: false,\n reSize: false,\n reCompile: false\n };\n // 需要重新布局\n this.setLayoutTag(true, null, false);\n // 第一版简易逻辑如果配置项出现增删,直接重新创建chart\n // 如果出现类型不同,同上\n if (spec.type !== this.type) {\n result.reMake = true;\n return result;\n }\n // spec set & transformSpec\n // diff meta length;\n\n const currentKeys = this._getSpecKeys(this._spec);\n const nextKeys = this._getSpecKeys(spec);\n if (!isEqual(currentKeys, nextKeys)) {\n result.reMake = true;\n return result;\n }\n // spec key 的个数一致,但是数组长度不一致时。remake\n for (let i = 0; i < currentKeys.length; i++) {\n const key = currentKeys[i];\n if (isArray((this._spec as any)[key]) && (this._spec as any)[key].length !== array((spec as any)[key]).length) {\n result.reMake = true;\n return result;\n }\n }\n const oldSpec = this._spec;\n this._spec = spec;\n // update chart config\n this.updateChartConfig(result, oldSpec);\n if (result.reMake) {\n return result;\n }\n\n this.updateGlobalScale(result);\n if (result.reMake) {\n return result;\n }\n // region 变化\n this.updateRegionSpec(result);\n if (result.reMake) {\n return result;\n }\n this.updateComponentSpec(result);\n if (result.reMake) {\n return result;\n }\n this.updateSeriesSpec(result);\n if (result.reMake) {\n return result;\n }\n /**\n * 当图表不是`remake`,而是部分更新的时候,所有的model需要`reInit`\n * 由于 data 最终是挂在到model上的,data的transform又依赖model中的`spec`,\n * 所以在更新model前需要调用`reInit`确保`spec`和内部变量已经更新\n */\n this.reInit();\n this.updateDataSpec();\n // ensure that the domain of the scale follows the data change\n this.updateGlobalScaleDomain();\n return result;\n }\n\n updateChartConfig(result: IUpdateSpecResult, oldSpec: IChartSpec) {\n // padding;\n this._paddingSpec = normalizeLayoutPaddingSpec(this._spec.padding ?? this._option?.getTheme().padding);\n\n // re compute padding & layout\n this._updateLayoutRect(this._viewBox);\n }\n\n updateDataSpec() {\n if (!this._spec.data) {\n return;\n }\n this._chartData.updateData(this._spec.data, false, true);\n }\n\n updateRegionSpec(result: IUpdateSpecResult) {\n if (!this._spec?.region) {\n return;\n }\n // 长度不同,直接判定为 remake\n if (this._spec.region.length !== this._regions.length) {\n result.reMake = true;\n return;\n }\n this._regions.forEach(r => {\n mergeUpdateResult(result, r.updateSpec(this._spec.region[r.getSpecIndex()]));\n });\n }\n\n updateComponentSpec(result: IUpdateSpecResult) {\n // 用来检测组件是否有新增\n const componentCache: {\n [key in string]: {\n specCount: number;\n componentCount: number;\n };\n } = {};\n const checkVisibleComponents: Record<string, boolean> = {\n [ComponentTypeEnum.title]: true,\n [ComponentTypeEnum.brush]: true,\n [ComponentTypeEnum.mapLabel]: true,\n [ComponentTypeEnum.indicator]: true\n };\n\n this._components.forEach(c => {\n if (c.type === ComponentTypeEnum.label || c.type === ComponentTypeEnum.totalLabel) {\n // label配置都会被解析到series中,所以不适合放在这里进行比对\n return;\n }\n if (checkVisibleComponents[c.type]) {\n checkVisibleComponents[c.type] = false;\n }\n\n const compSpecKey = c.specKey || c.type;\n // 每一个组件获取对应的speck\n const cmpSpec = (this._spec as any)[compSpecKey] ?? {};\n\n if (isArray(cmpSpec)) {\n componentCache[compSpecKey] = componentCache[compSpecKey] || {\n specCount: cmpSpec.length,\n componentCount: 0\n };\n componentCache[compSpecKey].componentCount++;\n mergeUpdateResult(result, c.updateSpec(cmpSpec[c.getSpecIndex()] ?? {}, cmpSpec));\n } else {\n mergeUpdateResult(result, c.updateSpec(cmpSpec));\n }\n });\n for (const key in componentCache) {\n if (Object.prototype.hasOwnProperty.call(componentCache, key)) {\n const element = componentCache[key];\n if (element.componentCount !== element.specCount) {\n result.reMake = true;\n }\n }\n }\n\n /** 这些组件 visible: false 不创建组件,也在this._components中,所以需要额外检测是否有visible 的切换 */\n const isVisible = (compSpec: any) => compSpec && compSpec.visible !== false;\n Object.keys(checkVisibleComponents).forEach(type => {\n if (checkVisibleComponents[type]) {\n const compSpec = (this._spec as any)[type];\n const switchToVisible = isArray(compSpec) ? compSpec.some(isVisible) : isVisible(compSpec);\n\n if (switchToVisible) {\n result.reMake = true;\n }\n }\n });\n }\n\n updateSeriesSpec(result: IUpdateSpecResult) {\n // 长度不同,直接判定为 remake\n if (this._spec.series.length !== this._series.length) {\n result.reMake = true;\n return;\n }\n this._series.forEach(s => {\n const spec = this._spec.series[s.getSpecIndex()];\n mergeUpdateResult(result, s.updateSpec(spec));\n });\n }\n\n getCanvas() {\n return this.getCompiler()?.getCanvas() ?? null;\n }\n\n private _updateLayoutRect(viewBox: IBoundsLike) {\n const canvasRect = this.getCanvasRect();\n let viewRect = canvasRect;\n if (viewBox) {\n this._viewBox = viewBox;\n const { x1 = 0, y1 = 0, x2, y2 } = viewBox;\n viewRect = {\n width: x2 - x1,\n height: y2 - y1\n };\n } else {\n this._viewBox = { x1: 0, y1: 0, x2: viewRect.width, y2: viewRect.height };\n }\n this._viewRect = viewRect;\n // resize 时 padding 也应该会发生变化 先计算\n this.padding = calcPadding(this._paddingSpec, viewRect, viewRect);\n this._layoutRect.width = viewRect.width - this.padding.left - this.padding.right;\n this._layoutRect.height = viewRect.height - this.padding.top - this.padding.bottom;\n this._layoutRect.x = this.padding.left;\n this._layoutRect.y = this.padding.top;\n\n this._event.emit(ChartEvent.layoutRectUpdate, { chart: this });\n }\n\n /** 设置当前全局主题 */\n setCurrentTheme() {\n // update chart config\n this.updateChartConfig({ change: true, reMake: false }, this._spec);\n\n // 需要重新布局\n this.setLayoutTag(true, null, false);\n\n // 设置色板,只设置 colorScale 的 range\n this.updateGlobalScaleTheme();\n this.reInit();\n }\n\n reInit() {\n [...this._regions, ...this._series, ...this._components].forEach(model => {\n const specInfo = model.getSpecInfo();\n\n if (specInfo && specInfo.spec) {\n // 找不到,说明在更新spec中,组件被注销了\n model.reInit(specInfo.spec);\n }\n });\n }\n\n clear() {\n // call on recompile & release\n this.getAllModels().forEach(i => i.clear?.());\n }\n\n compile() {\n this.compileBackground();\n this.compileLayout();\n this.compileRegions();\n this.compileSeries();\n this.compileComponents();\n }\n\n afterCompile() {\n this.getAllRegions().forEach(r => {\n r.afterCompile?.();\n });\n this.getAllSeries().forEach(s => {\n s.afterCompile?.();\n });\n this.getAllComponents().forEach(c => {\n c.afterCompile?.();\n });\n }\n\n compileLayout() {\n const { width, height } = this.getCanvasRect();\n this.getCompiler().setSize(width, height);\n }\n\n compileBackground() {\n if (!this._backgroundMark) {\n return;\n }\n this._backgroundMark.compile({ context: { model: this } });\n this._backgroundMark.getProduct()?.layout(() => {\n // console.log('region mark layout');\n });\n }\n\n compileRegions() {\n this._option.performanceHook?.beforeRegionCompile?.();\n this.getAllRegions().forEach(r => {\n r.compile();\n });\n this._option.performanceHook?.afterRegionCompile?.();\n }\n\n compileSeries() {\n this._option.performanceHook?.beforeSeriesCompile?.();\n this.getAllSeries().forEach(s => {\n s.compile();\n });\n this._option.performanceHook?.afterSeriesCompile?.();\n }\n\n compileComponents() {\n this._option.performanceHook?.beforeComponentCompile?.();\n this.getAllComponents().forEach(c => {\n c.compile();\n });\n this._option.performanceHook?.afterComponentCompile?.();\n }\n\n release() {\n /* release 前的处理 */\n [...this._components, ...this._regions, ...this._series].forEach(m => {\n m.beforeRelease();\n });\n\n /* 开始 release */\n super.release();\n // clear event , temporary function of chart items\n this.clear();\n\n [...this._components, ...this._regions, ...this._series].forEach(m => {\n m.release();\n });\n this._components = this._regions = this._series = [];\n this._spec = {} as any;\n // FIXME: type lint\n this._dataSet = this._globalScale = this._layoutFunc = null as unknown as any;\n this._layoutTag = false;\n this._idMap.clear();\n }\n\n onLayout(srView: IView) {\n const root = srView.rootMark;\n this.layout({ group: root, srView });\n }\n\n /**\n * 更新或设置图元状态\n * @param state 状态筛选器\n * @param filter 筛选器\n */\n updateState(\n state: Record<string, Omit<IMarkStateSpec<unknown>, 'style'>>,\n filter?: (series: ISeries, mark: IMark, stateKey: string) => boolean //series + mark 筛选\n ): void {\n const seriesArr = this.getAllSeries();\n for (const key in state) {\n if (isEmpty(state[key])) {\n continue;\n }\n const stateSpec = state[key];\n let stateInfo: IStateInfo = { stateValue: key };\n if (isFunction(stateSpec.filter)) {\n stateInfo = { filter: stateSpec.filter, ...stateInfo };\n } else {\n stateInfo = { ...stateSpec.filter, ...stateInfo };\n }\n if (stateSpec.level) {\n stateInfo.level = stateSpec.level;\n }\n seriesArr.forEach(series => {\n series.getMarks().forEach(m => {\n if (!m.stateStyle[key]) {\n return;\n }\n if (!filter || filter(series, m, key)) {\n m.state.changeStateInfo(stateInfo);\n m.updateMarkState(key);\n }\n });\n });\n }\n }\n\n /**\n * 更新图元选中状态\n * @param datum hover 图元数据\n * @param filter 筛选器 用来筛选系列与mark\n * @param region region 筛选器\n */\n setSelected(\n datum: MaybeArray<any> | null,\n filter?: (series: ISeries, mark: IMark) => boolean,\n region?: IRegionQuerier\n ): void {\n this._setStateInDatum(STATE_VALUE_ENUM.STATE_SELECTED, true, datum, filter, region);\n }\n\n /**\n * 更新图元 hover 状态\n * @param datum hover 图元数据\n * @param filter 筛选器 用来筛选系列与mark\n * @param region region 筛选器\n */\n setHovered(\n datum: MaybeArray<Datum> | null,\n filter?: (series: ISeries, mark: IMark) => boolean,\n region?: IRegionQuerier\n ): void {\n this._setStateInDatum(STATE_VALUE_ENUM.STATE_HOVER, true, datum, filter, region);\n }\n\n /**\n * 清除所有图元的状态\n *\n * @since 1.11.0\n */\n clearState(state: string) {\n this.getAllRegions().forEach(r => {\n r.interaction.clearEventElement(state, true);\n r.interaction.resetInteraction(state, null);\n return;\n });\n }\n\n /**\n * 清除所有图元的所有状态\n *\n * @since 1.12.4\n */\n clearAllStates() {\n this.getAllRegions().forEach(r => {\n r.interaction.clearAllEventElement();\n r.interaction.resetAllInteraction();\n return;\n });\n }\n\n /**\n * 清除所有图元的选中状态\n *\n * @since 1.11.0\n */\n clearSelected() {\n this.clearState(STATE_VALUE_ENUM.STATE_SELECTED);\n }\n\n /**\n * 清除所有图元的hover状态\n *\n * @since 1.11.0\n */\n clearHovered() {\n this.clearState(STATE_VALUE_ENUM.STATE_HOVER);\n }\n\n private _initEvent() {\n [ChartEvent.dataZoomChange, ChartEvent.scrollBarChange].forEach(event => {\n this._event.on(event, ({ value }) => {\n this._disableMarkAnimation(['exit', 'update']);\n const enableMarkAnimate = () => {\n this._enableMarkAnimation(['exit', 'update']);\n this._event.off(VGRAMMAR_HOOK_EVENT.AFTER_MARK_RENDER_END, enableMarkAnimate);\n };\n this._event.on(VGRAMMAR_HOOK_EVENT.AFTER_MARK_RENDER_END, enableMarkAnimate);\n });\n });\n }\n\n protected _enableMarkAnimation(states: string | string[]) {\n const marks = this.getAllMarks();\n marks.forEach(mark => {\n const product = mark.getProduct();\n if (product && product.animate) {\n product.animate.enableAnimationState(states);\n }\n });\n }\n\n protected _disableMarkAnimation(states: string | string[]) {\n const marks = this.getAllMarks();\n marks.forEach(mark => {\n const product = mark.getProduct();\n if (product && product.animate) {\n product.animate.disableAnimationState(states);\n }\n });\n }\n\n protected _setStateInDatum(\n stateKey: string,\n checkReverse: boolean,\n datum: MaybeArray<Datum> | null,\n filter?: (series: ISeries, mark: IMark) => boolean,\n region?: IRegionQuerier\n ) {\n datum = datum ? array(datum) : null;\n const keys = !datum ? null : Object.keys(datum[0]);\n this.getRegionsInQuerier(region).forEach(r => {\n if (!datum) {\n r.interaction.clearEventElement(stateKey, true);\n return;\n }\n r.getSeries().forEach(s => {\n s.getMarks().forEach(m => {\n if (!m.getProduct()) {\n return;\n }\n if (!filter || (isFunction(filter) && filter(s, m))) {\n const isCollect = m.getProduct().isCollectionMark();\n const elements = m.getProduct().elements;\n let pickElements = [] as IElement[];\n if (isCollect) {\n pickElements = elements.filter(e => {\n const elDatum = e.getDatum();\n // eslint-disable-next-line max-nested-callbacks, eqeqeq\n (datum as Datum[]).every((d, index) => keys.every(k => d[k] == elDatum[index][k]));\n });\n } else {\n if (datum.length > 1) {\n const datumTemp = (datum as Datum[]).slice();\n pickElements = elements.filter(e => {\n if (datumTemp.length === 0) {\n return false;\n }\n const elDatum = e.getDatum();\n // eslint-disable-next-line max-nested-callbacks, eqeqeq\n const index = datumTemp.findIndex(d => keys.every(k => d[k] == elDatum[k]));\n if (index >= 0) {\n datumTemp.splice(index, 1);\n return true;\n }\n return false;\n });\n } else {\n // eslint-disable-next-line eqeqeq\n const el = elements.find(e => keys.every(k => datum[0][k] == e.getDatum()[k]));\n el && (pickElements = [el]);\n }\n }\n pickElements.forEach(element => {\n r.interaction.startInteraction(stateKey, element);\n });\n }\n });\n });\n if (checkReverse) {\n r.interaction.reverseEventElement(stateKey);\n }\n });\n }\n\n /**\n * setDimensionIndex could trigger mark state, tooltip, crosshair\n * @param value dimension value\n * @param opt option for set trigger\n */\n setDimensionIndex(value: StringOrNumber, opt: DimensionIndexOption) {\n // event\n let dimensionInfo: IDimensionInfo[] | null = null;\n Array.from(this._event.getComposedEventMap().values()).forEach(e => {\n const { eventType, event } = e;\n if (eventType === DimensionEventEnum.dimensionHover || eventType === DimensionEventEnum.dimensionClick) {\n const info = event.dispatch(value, opt) as [];\n if (info?.length) {\n dimensionInfo = info;\n }\n }\n });\n const isUnableValue =\n isNil(value) || !dimensionInfo || dimensionInfo.every(d => isDiscrete(d.axis.getScale().type) && isNil(d.index));\n // tooltip\n if (opt.tooltip !== false) {\n const tooltip = this.getComponentsByType(ComponentTypeEnum.tooltip)[0] as unknown as ITooltip;\n\n if (tooltip?.getVisible()) {\n if (isUnableValue) {\n (<any>tooltip).hideTooltip?.();\n } else {\n const dataFilter = {};\n dimensionInfo.forEach((d: IDimensionInfo) => {\n const { axis, value, data } = d;\n const isY = axis.getOrient() === 'left' || axis.getOrient() === 'right';\n data.forEach(d => {\n const field = isY ? (<ICartesianSeries>d.series).fieldY[0] : (<ICartesianSeries>d.series).fieldX[0];\n\n dataFilter[field] = d.datum?.[0]?.[field] ?? value;\n });\n });\n tooltip.showTooltip(dataFilter, opt.showTooltipOption);\n }\n }\n }\n if (opt.crosshair !== false) {\n const crosshair = this.getComponentsByType(ComponentTypeEnum.cartesianCrosshair)[0] as unknown as ICrossHair;\n\n if (crosshair && crosshair.clearAxisValue && crosshair.setAxisValue) {\n if (isUnableValue) {\n crosshair.hideCrosshair();\n } else {\n crosshair.showCrosshair(dimensionInfo as { axis: IAxis; value: string | number }[]);\n }\n }\n }\n }\n\n getColorScheme() {\n return this._option.getTheme?.().colorScheme;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/chart/base/base-chart.ts"],"names":[],"mappings":"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","file":"base-chart.js","sourcesContent":["import type { IRegionConstructor } from '../../region/interface';\nimport { ChartData } from '../chart-meta/data';\nimport type { ICrossHair } from '../../component/crosshair/interface/spec';\nimport type { IDimensionInfo } from '../../event/events/dimension/interface';\nimport type {\n Datum,\n IMarkStateSpec,\n IVisual,\n IVisualSpecScale,\n IRegionQuerier,\n MaybeArray,\n IPadding,\n IRect,\n StringOrNumber,\n IChartSpec,\n IDataValues,\n ILayoutRect,\n ILayoutOrientPadding\n} from '../../typings';\nimport type { ILayoutItem, LayoutCallBack } from '../../layout/interface';\nimport { GlobalScale } from '../../scale/global-scale';\nimport type { ILayoutModelState, IModel, IModelOption, IModelSpecInfo, IUpdateSpecResult } from '../../model/interface';\nimport type {\n IChart,\n IChartLayoutOption,\n IChartRenderOption,\n IChartOption,\n IChartEvaluateOption,\n ILayoutParams,\n DimensionIndexOption,\n IChartSpecTransformerOption,\n IChartSpecTransformer\n} from '../interface';\nimport type { ICartesianSeries, ISeries, ISeriesConstructor } from '../../series/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IRegion } from '../../region/interface';\nimport { ComponentTypeEnum } from '../../component/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IComponent, IComponentConstructor } from '../../component/interface';\nimport type { IMark, IRectMark } from '../../mark/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkTypeEnum } from '../../mark/interface';\nimport type { IEvent } from '../../event/interface';\nimport type { DataView } from '@visactor/vdataset';\n// eslint-disable-next-line no-duplicate-imports\nimport type { DataSet } from '@visactor/vdataset';\nimport { Factory } from '../../core/factory';\nimport { Event } from '../../event/event';\nimport { isArray, isValid, createID, calcPadding, normalizeLayoutPaddingSpec, array } from '../../util';\nimport { BaseModel } from '../../model/base-model';\nimport { BaseMark } from '../../mark/base/base-mark';\nimport { DEFAULT_CHART_WIDTH, DEFAULT_CHART_HEIGHT } from '../../constant/base';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IParserOptions } from '@visactor/vdataset';\nimport type { IBoundsLike, Maybe } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { isFunction, isEmpty, isNil, isString, isEqual, pickWithout } from '@visactor/vutils';\nimport { getDataScheme } from '../../theme/color-scheme/util';\nimport type { IElement, IRunningConfig as IMorphConfig, IView } from '@visactor/vgrammar-core';\nimport { CompilableBase } from '../../compile/compilable-base';\nimport type { IStateInfo } from '../../compile/mark/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { STATE_VALUE_ENUM } from '../../compile/mark/interface';\nimport { ChartEvent, VGRAMMAR_HOOK_EVENT } from '../../constant/event';\nimport type { IGlobalScale } from '../../scale/interface';\nimport { DimensionEventEnum } from '../../event/events/dimension';\nimport type { ITooltip } from '../../component/tooltip/interface';\nimport { calculateChartSize, mergeUpdateResult } from '../util';\nimport { isDiscrete } from '@visactor/vscale';\nimport { updateDataViewInData } from '../../data/initialize';\nimport { LayoutZIndex } from '../../constant/layout';\nimport type { IAxis } from '../../component/axis/interface/common';\n\nexport class BaseChart<T extends IChartSpec> extends CompilableBase implements IChart {\n readonly type: string = 'chart';\n readonly seriesType: string;\n readonly transformerConstructor: new (option: IChartSpecTransformerOption) => IChartSpecTransformer;\n\n readonly id: number = createID();\n\n //FIXME: 转换后的 spec 需要声明 ITransformedChartSpec\n protected _spec: T;\n getSpec() {\n return this._spec;\n }\n setSpec(s: T) {\n // TODO 通过spec设置进行图表更新\n this._spec = s;\n }\n\n getOption() {\n return this._option;\n }\n\n protected _regions: IRegion[] = [];\n // 系列\n protected _series: ISeries[] = [];\n // 组件\n protected _components: IComponent[] = [];\n\n // 布局\n protected _layoutFunc: LayoutCallBack;\n protected _layoutRect: IRect = {\n x: 0,\n y: 0,\n width: DEFAULT_CHART_WIDTH,\n height: DEFAULT_CHART_HEIGHT\n };\n getLayoutRect() {\n return this._layoutRect;\n }\n protected _viewRect: ILayoutRect = {\n width: DEFAULT_CHART_WIDTH,\n height: DEFAULT_CHART_HEIGHT\n };\n getViewRect() {\n return this._viewRect;\n }\n protected _viewBox: IBoundsLike = {\n x1: 0,\n y1: 0,\n x2: DEFAULT_CHART_WIDTH,\n y2: DEFAULT_CHART_HEIGHT\n };\n\n protected _layoutTag: boolean = true;\n getLayoutTag() {\n return this._layoutTag;\n }\n setLayoutTag(tag: boolean, morphConfig?: IMorphConfig, renderNextTick: boolean = true): boolean {\n this._layoutTag = tag;\n const compiler = this.getCompiler();\n\n if (compiler?.getVGrammarView()) {\n compiler.getVGrammarView().updateLayoutTag();\n tag && renderNextTick && compiler.renderNextTick(morphConfig);\n }\n return this._layoutTag;\n }\n\n // 模块参数\n protected _modelOption: IModelOption;\n\n // 全局通道\n // protected _globalScale: { [key: string]: IBaseScale } = {};\n protected _globalScale: IGlobalScale;\n\n getGlobalScale() {\n return this._globalScale;\n }\n\n // mark & model 的 id 映射\n protected _idMap: Map<number, IModel | IMark> = new Map();\n\n protected _event: IEvent;\n getEvent() {\n return this._event;\n }\n\n // data\n protected _dataSet: DataSet;\n protected _chartData: ChartData;\n get chartData() {\n return this._chartData;\n }\n\n protected declare _option: IChartOption;\n\n // 模块内的需要动态影像图表的属性\n readonly state: ILayoutModelState = {\n layoutUpdateRank: 1\n };\n\n // stack\n\n padding: IPadding = { top: 0, left: 0, right: 0, bottom: 0 };\n protected _paddingSpec: ILayoutOrientPadding;\n\n protected _canvasRect: ILayoutRect;\n\n // background\n protected _backgroundMark: IRectMark;\n\n constructor(spec: T, option: IChartOption) {\n super(option);\n this._paddingSpec = normalizeLayoutPaddingSpec(spec.padding ?? option.getTheme().padding);\n\n this._event = new Event(option.eventDispatcher, option.mode);\n this._dataSet = option.dataSet;\n this._chartData = new ChartData(this._dataSet);\n this._modelOption = {\n ...option,\n mode: this._option.mode,\n map: this._idMap,\n getChartLayoutRect: () => this._layoutRect,\n getChartViewRect: () => this._viewRect,\n getChart: () => this,\n globalScale: this._globalScale,\n onError: this._option?.onError,\n disableTriggerEvent: this._option?.disableTriggerEvent === true,\n getSeriesData: this._chartData.getSeriesData.bind(this._chartData)\n };\n\n this._spec = spec;\n }\n\n created(transformer: Maybe<IChartSpecTransformer>) {\n // data\n this._chartData.parseData(this._spec.data);\n // scale\n this._createGlobalScale();\n // background\n this._createBackground();\n // 基础内容\n this._createLayout();\n // 基于spec 创建元素。\n // region\n transformer.forEachRegionInSpec(this._spec, this._createRegion.bind(this));\n // series\n transformer.forEachSeriesInSpec(this._spec, this._createSeries.bind(this));\n // components\n transformer.forEachComponentInSpec(this._spec, this._createComponent.bind(this), this._option.getSpecInfo());\n }\n\n init() {\n (this as any)._beforeInit?.();\n // 元素创建完毕后再执行各元素的初始化 方便各元素能获取到其他模块\n this._regions.forEach(r => r.init({}));\n this._series.forEach(s => s.init({}));\n this._components.forEach(c => c.init({ dataSet: this._dataSet }));\n\n // event\n this._initEvent();\n\n (this as any)._initStack?.();\n\n // data flow start\n this.reDataFlow();\n }\n\n reDataFlow() {\n this._series.forEach(s => s.getRawData()?.markRunning());\n this._series.forEach(s => s.fillData());\n this.updateGlobalScaleDomain();\n }\n\n onResize(width: number, height: number, reRender: boolean = true): void {\n const canvasRect = {\n width,\n height\n };\n this._canvasRect = canvasRect;\n this._updateLayoutRect(this._option.viewBox);\n this.setLayoutTag(true, null, reRender);\n }\n\n updateViewBox(viewBox: IBoundsLike, reLayout: boolean) {\n this._option.viewBox = viewBox;\n this._updateLayoutRect(viewBox);\n this.setLayoutTag(true, null, reLayout);\n }\n\n private _createBackground() {\n const bg = this._spec.background;\n if (!bg || typeof bg !== 'object' || isValid(bg.gradient)) {\n return;\n }\n const backgroundStyle = pickWithout(bg, ['x', 'y', 'width', 'height', 'x1', 'y1', 'image']);\n (backgroundStyle as any).background = (bg as any).image;\n\n this._backgroundMark = Factory.createMark(MarkTypeEnum.group, 'chart-background', {\n model: this as any,\n map: this._option.map,\n getCompiler: this.getCompiler,\n globalScale: this._globalScale\n }) as IRectMark;\n this._backgroundMark.created();\n this._backgroundMark.setStyle({\n ...backgroundStyle,\n x: () => this._viewBox.x1,\n y: () => this._viewBox.y1,\n width: () => this._viewBox.x2 - this._viewBox.x1,\n height: () => this._viewBox.y2 - this._viewBox.y1\n });\n this._backgroundMark.setMarkConfig({\n zIndex: LayoutZIndex.SeriesGroup - 2\n });\n }\n\n protected _createRegion(constructor: IRegionConstructor, specInfo: IModelSpecInfo) {\n if (!constructor) {\n return;\n }\n\n const { spec, ...others } = specInfo;\n const region = new constructor(spec, {\n ...this._modelOption,\n ...others\n });\n if (region) {\n region.created();\n this._regions.push(region);\n }\n }\n\n protected _createSeries(constructor: ISeriesConstructor, specInfo: IModelSpecInfo) {\n if (!constructor) {\n return;\n }\n\n const { spec, ...others } = specInfo;\n\n let region: IRegion | undefined;\n if (isValid(spec.regionId)) {\n region = this.getRegionsInUserId(spec.regionId);\n } else if (isValid(spec.regionIndex)) {\n region = this.getRegionsInIndex([spec.regionIndex])[0];\n }\n\n if (!region && !(region = this._regions[0])) {\n return;\n }\n\n const series = new constructor(spec, {\n ...this._modelOption,\n ...others,\n type: spec.type,\n region,\n globalScale: this._globalScale,\n sourceDataList: this._chartData.dataList\n });\n\n if (series) {\n series.created();\n this._series.push(series);\n region.addSeries(series);\n }\n }\n\n getAllSeries = (): ISeries[] => {\n return this._series ?? [];\n };\n\n getSeriesById(id: number): ISeries | undefined {\n return this._series.find(x => x.id === id);\n }\n\n protected _createComponent(constructor: IComponentConstructor, specInfo: IModelSpecInfo) {\n const component = constructor.createComponent(specInfo, {\n ...this._modelOption,\n type: constructor.type,\n getAllRegions: this.getAllRegions,\n getRegionsInIndex: this.getRegionsInIndex,\n getRegionsInIds: this.getRegionsInIds,\n getRegionsInUserIdOrIndex: this.getRegionsInUserIdOrIndex,\n getAllSeries: this.getAllSeries,\n getSeriesInIndex: this.getSeriesInIndex,\n getSeriesInIds: this.getSeriesInIds,\n getSeriesInUserIdOrIndex: this.getSeriesInUserIdOrIndex,\n getAllComponents: this.getComponents,\n getComponentByIndex: this.getComponentByIndex,\n getComponentByUserId: this.getComponentByUserId,\n getComponentsByKey: this.getComponentsByKey,\n getComponentsByType: this.getComponentsByType\n });\n if (!component) {\n return;\n }\n component.created();\n this._components.push(component);\n }\n\n getAllComponents(): IComponent[] {\n return this._components;\n }\n\n getAllModels(): IModel[] {\n return [].concat(this.getAllSeries(), this.getAllComponents(), this.getAllRegions());\n }\n\n getModelInFilter(filter: string | { type: string; index: number } | ((model: IModel) => boolean)) {\n if (isString(filter)) {\n return this.getAllModels().find(m => m.userId === filter);\n } else if (isFunction(filter)) {\n return this.getAllModels().find(m => filter(m));\n }\n let index = 0;\n return this.getAllModels().find(m => {\n if ((m.specKey ?? m.type) === filter.type) {\n if (index === filter.index) {\n return true;\n }\n index++;\n }\n return false;\n });\n }\n\n private _createLayout() {\n this._updateLayoutRect(this._option.viewBox);\n this._initLayoutFunc();\n }\n\n setLayout(layout: LayoutCallBack) {\n // 统一自定义 layout 到 option 中\n this._option.layout = layout;\n this._initLayoutFunc();\n }\n\n /** 可以通过设置 layout = null 来取消自定义布局。启用spec上的布局配置 */\n private _initLayoutFunc() {\n this._layoutFunc = this._option.layout;\n if (!this._layoutFunc) {\n // 判断是否使用3d的layout\n let use3dLayout = false;\n // 查找是否需要使用3d布局模块\n if ((this._spec as any).zField || (this._spec.series && this._spec.series.some((s: any) => s.zField))) {\n use3dLayout = true;\n }\n const constructor = Factory.getLayoutInKey(this._spec.layout?.type ?? (use3dLayout ? 'layout3d' : 'base'));\n if (constructor) {\n const layout = new constructor(this._spec.layout, {\n onError: this._option?.onError\n });\n this._layoutFunc = layout.layoutItems.bind(layout);\n }\n }\n }\n\n layout(params: ILayoutParams): void {\n this._option.performanceHook?.beforeLayoutWithSceneGraph?.();\n if (this.getLayoutTag()) {\n this._event.emit(ChartEvent.layoutStart, { chart: this, vchart: this._option.globalInstance });\n\n this.onLayoutStart(params);\n const elements = this.getLayoutElements();\n this._layoutFunc(this, elements, this._layoutRect, this._viewBox);\n this._event.emit(ChartEvent.afterLayout, { elements, chart: this });\n this.setLayoutTag(false);\n this.onLayoutEnd(params);\n\n this._event.emit(ChartEvent.layoutEnd, { chart: this, vchart: this._option.globalInstance });\n }\n this._option.performanceHook?.afterLayoutWithSceneGraph?.();\n }\n\n // 通知所有需要通知的元素 onLayout 钩子\n onLayoutStart(option: IChartLayoutOption) {\n const elements = this.getAllModels();\n elements.forEach(element => element.onLayoutStart(this._layoutRect, this._viewRect, option));\n }\n\n // 通知所有需要通知的元素 onLayoutEnd 钩子\n onLayoutEnd(option: IChartLayoutOption) {\n const elements = this.getAllModels();\n elements.forEach(element => {\n // series.onLayoutEnd will be called by region model\n if (element.modelType !== 'series') {\n element.onLayoutEnd(option);\n }\n });\n }\n\n onEvaluateEnd(option: IChartEvaluateOption) {\n const elements = [...this._components, ...this._regions, ...this._series];\n elements.forEach(element => element.onEvaluateEnd(option));\n }\n\n getLayoutElements(): ILayoutItem[] {\n return this.getAllModels()\n .map(i => i.layout)\n .filter(i => !!i);\n }\n\n // 区域\n getRegionsInIndex = (index?: number[]): IRegion[] => {\n if (!index || index.length === 0) {\n return [this._regions[0]];\n }\n return this._regions.filter((_r, i) => index.includes(i));\n };\n\n getAllRegions = () => {\n return this._regions;\n };\n\n getRegionsInIds = (ids: number[]): IRegion[] => {\n if (!ids) {\n return [];\n }\n return this._regions.filter(r => ids.includes(r.id));\n };\n\n getRegionsInQuerier = (region?: MaybeArray<IRegionQuerier>) => {\n if (region) {\n return this._regions.filter((r, index) => {\n return array(region).some(\n regionFilter =>\n (isValid(regionFilter.regionId) && regionFilter.regionId === r.userId) || regionFilter.regionIndex === index\n );\n });\n }\n return this._regions;\n };\n\n getRegionsInUserId = (userId: StringOrNumber): IRegion | undefined => {\n if (!userId) {\n return undefined;\n }\n return this._regions.find(r => r.userId === userId);\n };\n\n getRegionsInUserIdOrIndex = (user_ids?: StringOrNumber[], index?: number[]): IRegion[] => {\n const regions = this.getAllRegions();\n return regions.filter(r => {\n if (user_ids?.length) {\n return r.userId && user_ids.includes(r.userId);\n } else if (index?.length) {\n return index.includes(r.getSpecIndex());\n }\n return true;\n });\n };\n\n // 模块\n getComponents = () => {\n return this._components;\n };\n\n // 区域\n getSeriesInIndex = (index?: number[]): ISeries[] => {\n if (!index || index.length === 0) {\n return [this._series[0]];\n }\n return this._series.filter((_r, i) => index.includes(i));\n };\n\n getSeriesInIds = (ids?: number[]): ISeries[] => {\n if (!ids) {\n return [];\n }\n return this._series.filter(r => ids.includes(r.id));\n };\n\n getSeriesInUserId = (userId: StringOrNumber): ISeries | undefined => {\n if (!userId) {\n return undefined;\n }\n return this._series.find(r => r.userId === userId);\n };\n\n getSeriesInUserIdOrIndex = (user_ids?: StringOrNumber[], index?: number[]): ISeries[] => {\n const series = this.getAllSeries();\n return series.filter(s => {\n if (user_ids?.length) {\n return s.userId && user_ids.includes(s.userId);\n } else if (index?.length) {\n return index.includes(s.getSpecIndex());\n }\n return true;\n });\n };\n\n getComponentByIndex = (key: string, index: number) => {\n const components = this._components.filter(c => (c.specKey || c.type) === key);\n if (!components || components.length === 0) {\n return undefined;\n }\n return components[index];\n };\n\n getComponentsByKey = (key: string) => {\n return this._components.filter(c => (c.specKey || c.type) === key);\n };\n\n getComponentByUserId = (userId: StringOrNumber) => {\n const component = this._components.find(s => s.userId === userId);\n if (component) {\n return component;\n }\n return undefined;\n };\n\n getComponentsByType = (type: string) => {\n return this._components.filter(c => c.type === type);\n };\n\n getModelById(id: number): IModel | undefined {\n const model = this._idMap.get(id);\n if (model && model instanceof BaseModel) {\n return model;\n }\n return undefined;\n }\n\n getModelByUserId(userId: StringOrNumber): IModel | undefined {\n // TODO: 考虑通过 map 结构优化获取方式 & 补充所有 model 的寻找方法\n const series = this.getSeriesInUserId(userId);\n if (series) {\n return series;\n }\n const region = this.getRegionsInUserId(userId);\n if (region) {\n return region;\n }\n const component = this.getComponentByUserId(userId);\n if (component) {\n return component;\n }\n return undefined;\n }\n\n getAllMarks(): IMark[] {\n const items = Array.from(this._idMap.values());\n return items.filter(item => item && item instanceof BaseMark) as IMark[];\n }\n\n getMarkById(id: number): IMark | undefined {\n const mark = this._idMap.get(id);\n if (mark && mark instanceof BaseMark) {\n return mark as IMark;\n }\n return undefined;\n }\n\n getMarkByUserName(name: string): IMark[] {\n return this.getAllMarks().filter(m => m.name && m.name === name);\n }\n\n updateData(id: StringOrNumber, data: unknown, updateGlobalScale: boolean = true, options?: IParserOptions) {\n const dv = this._dataSet.getDataView(id as string);\n if (dv) {\n dv.markRunning();\n dv.parseNewData(data, options);\n }\n\n if (updateGlobalScale) {\n this.updateGlobalScaleDomain();\n }\n this.getAllModels().forEach(model => model.onDataUpdate());\n }\n\n updateFullData(data: IDataValues | IDataValues[], updateGlobalScale: boolean = true) {\n array(data).forEach(d => {\n const dv = this._dataSet.getDataView(d.id);\n if (dv) {\n dv.markRunning();\n }\n });\n array(data).forEach(d => {\n const dv = this._dataSet.getDataView(d.id);\n if (dv) {\n updateDataViewInData(dv, d, true);\n }\n });\n if (updateGlobalScale) {\n this.updateGlobalScaleDomain();\n }\n this.getAllModels().forEach(model => model.onDataUpdate());\n }\n\n onRender(option: IChartRenderOption) {\n // do nothing\n }\n\n setCanvasRect(width: number, height: number) {\n this._canvasRect = { width, height };\n }\n\n getCanvasRect(): Omit<IRect, 'x' | 'y'> {\n if (this._canvasRect) {\n return this._canvasRect;\n }\n\n this._canvasRect = calculateChartSize(this._spec, this._option, {\n width: DEFAULT_CHART_WIDTH,\n height: DEFAULT_CHART_HEIGHT\n });\n\n return this._canvasRect;\n }\n\n getSeriesData(id: StringOrNumber | undefined, index: number | undefined): DataView | undefined {\n return this._chartData.getSeriesData(id, index);\n }\n\n private _transformSpecScale() {\n const scales: IChartSpec['scales'] = this._spec.scales ? [...this._spec.scales] : [];\n let colorScaleSpec: IVisualSpecScale<any, any> = scales.find(s => s.id === 'color');\n const colorScheme = this.getColorScheme();\n if (!colorScaleSpec) {\n colorScaleSpec = {\n type: 'ordinal',\n id: 'color',\n domain: null,\n range: null\n };\n scales.push(colorScaleSpec);\n if (this._spec.color) {\n const colorSpec = this._spec.color as string[] | IVisual<string>;\n\n // range array\n if (isArray(colorSpec)) {\n colorScaleSpec.range = colorSpec;\n } else {\n const tempSpec = colorSpec as IVisualSpecScale<any, any>;\n Object.prototype.hasOwnProperty.call(tempSpec, 'type') && (colorScaleSpec.type = tempSpec.type);\n Object.prototype.hasOwnProperty.call(tempSpec, 'domain') && (colorScaleSpec.domain = tempSpec.domain);\n Object.prototype.hasOwnProperty.call(tempSpec, 'range') && (colorScaleSpec.range = tempSpec.range);\n Object.prototype.hasOwnProperty.call(tempSpec, 'specified') &&\n (colorScaleSpec.specified = tempSpec.specified);\n Object.prototype.hasOwnProperty.call(tempSpec, 'clamp') && (colorScaleSpec.clamp = tempSpec.clamp);\n }\n }\n }\n // 如果没有range设置\n // length === 0 就认为是没有配置,用户配置 color: [] 依然认为是无效配置,启用主题色板\n if (!colorScaleSpec.range?.length) {\n colorScaleSpec.range = getDataScheme(colorScheme);\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n colorScaleSpec.rangeTheme = true;\n }\n return scales;\n }\n\n // 全局通道\n private _createGlobalScale() {\n this._globalScale = new GlobalScale(this._transformSpecScale(), this);\n this._modelOption.globalScale = this._globalScale;\n }\n\n updateGlobalScaleDomain() {\n const domainSet = new Set();\n this._series.forEach(s => {\n const keys = s.getSeriesKeys();\n keys && keys.forEach(k => domainSet.add(k));\n });\n // domain\n const domain = Array.from(domainSet);\n // 如果 global scale 当前没有 domain 的话,就使用这个domain\n // 整理了目前会影响全局 scale 的逻辑,但是当前这个节点使用这个逻辑可行\n // 但是考虑到组件也可能会有修改 scale 的逻辑\n // 增加一个属性设置优先级也许是必须的?\n this._globalScale.updateScaleDomain(domain);\n }\n\n updateGlobalScale(result: IUpdateSpecResult) {\n mergeUpdateResult(result, this._globalScale.updateSpec(this._transformSpecScale()));\n }\n\n updateGlobalScaleTheme() {\n const colorSpec = this._globalScale.getScaleSpec('color');\n const colorScheme = this.getColorScheme();\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n if (colorSpec.rangeTheme) {\n colorSpec.range = getDataScheme(colorScheme);\n this._globalScale.getScale('color').range(colorSpec.range);\n }\n }\n\n private _getSpecKeys(spec: T) {\n const ignoreKeys: Record<string, boolean> = { width: true, height: true };\n return Object.keys(spec)\n .filter(key => !ignoreKeys[key])\n .sort();\n }\n\n updateSpec(spec: T) {\n const result = {\n change: false,\n reMake: false,\n reRender: false,\n reSize: false,\n reCompile: false\n };\n // 需要重新布局\n this.setLayoutTag(true, null, false);\n // 第一版简易逻辑如果配置项出现增删,直接重新创建chart\n // 如果出现类型不同,同上\n if (spec.type !== this.type) {\n result.reMake = true;\n return result;\n }\n // spec set & transformSpec\n // diff meta length;\n\n const currentKeys = this._getSpecKeys(this._spec);\n const nextKeys = this._getSpecKeys(spec);\n if (!isEqual(currentKeys, nextKeys)) {\n result.reMake = true;\n return result;\n }\n // spec key 的个数一致,但是数组长度不一致时。remake\n for (let i = 0; i < currentKeys.length; i++) {\n const key = currentKeys[i];\n if (isArray((this._spec as any)[key]) && (this._spec as any)[key].length !== array((spec as any)[key]).length) {\n result.reMake = true;\n return result;\n }\n }\n const oldSpec = this._spec;\n this._spec = spec;\n // update chart config\n this.updateChartConfig(result, oldSpec);\n if (result.reMake) {\n return result;\n }\n\n this.updateGlobalScale(result);\n if (result.reMake) {\n return result;\n }\n // region 变化\n this.updateRegionSpec(result);\n if (result.reMake) {\n return result;\n }\n this.updateComponentSpec(result);\n if (result.reMake) {\n return result;\n }\n this.updateSeriesSpec(result);\n if (result.reMake) {\n return result;\n }\n /**\n * 当图表不是`remake`,而是部分更新的时候,所有的model需要`reInit`\n * 由于 data 最终是挂在到model上的,data的transform又依赖model中的`spec`,\n * 所以在更新model前需要调用`reInit`确保`spec`和内部变量已经更新\n */\n this.reInit();\n this.updateDataSpec();\n // ensure that the domain of the scale follows the data change\n this.updateGlobalScaleDomain();\n return result;\n }\n\n updateChartConfig(result: IUpdateSpecResult, oldSpec: IChartSpec) {\n // padding;\n this._paddingSpec = normalizeLayoutPaddingSpec(this._spec.padding ?? this._option?.getTheme().padding);\n\n // re compute padding & layout\n this._updateLayoutRect(this._viewBox);\n }\n\n updateDataSpec() {\n if (!this._spec.data) {\n return;\n }\n this._chartData.updateData(this._spec.data, false, true);\n }\n\n updateRegionSpec(result: IUpdateSpecResult) {\n if (!this._spec?.region) {\n return;\n }\n // 长度不同,直接判定为 remake\n if (this._spec.region.length !== this._regions.length) {\n result.reMake = true;\n return;\n }\n this._regions.forEach(r => {\n mergeUpdateResult(result, r.updateSpec(this._spec.region[r.getSpecIndex()]));\n });\n }\n\n updateComponentSpec(result: IUpdateSpecResult) {\n // 用来检测组件是否有新增\n const componentCache: {\n [key in string]: {\n specCount: number;\n componentCount: number;\n };\n } = {};\n const checkVisibleComponents: Record<string, boolean> = {\n [ComponentTypeEnum.title]: true,\n [ComponentTypeEnum.brush]: true,\n [ComponentTypeEnum.mapLabel]: true,\n [ComponentTypeEnum.indicator]: true\n };\n\n this._components.forEach(c => {\n if (c.type === ComponentTypeEnum.label || c.type === ComponentTypeEnum.totalLabel) {\n // label配置都会被解析到series中,所以不适合放在这里进行比对\n return;\n }\n if (checkVisibleComponents[c.type]) {\n checkVisibleComponents[c.type] = false;\n }\n\n const compSpecKey = c.specKey || c.type;\n // 每一个组件获取对应的speck\n const cmpSpec = (this._spec as any)[compSpecKey] ?? {};\n\n if (isArray(cmpSpec)) {\n componentCache[compSpecKey] = componentCache[compSpecKey] || {\n specCount: cmpSpec.length,\n componentCount: 0\n };\n componentCache[compSpecKey].componentCount++;\n mergeUpdateResult(result, c.updateSpec(cmpSpec[c.getSpecIndex()] ?? {}, cmpSpec));\n } else {\n mergeUpdateResult(result, c.updateSpec(cmpSpec));\n }\n });\n for (const key in componentCache) {\n if (Object.prototype.hasOwnProperty.call(componentCache, key)) {\n const element = componentCache[key];\n if (element.componentCount !== element.specCount) {\n result.reMake = true;\n }\n }\n }\n\n /** 这些组件 visible: false 不创建组件,也在this._components中,所以需要额外检测是否有visible 的切换 */\n const isVisible = (compSpec: any) => compSpec && compSpec.visible !== false;\n Object.keys(checkVisibleComponents).forEach(type => {\n if (checkVisibleComponents[type]) {\n const compSpec = (this._spec as any)[type];\n const switchToVisible = isArray(compSpec) ? compSpec.some(isVisible) : isVisible(compSpec);\n\n if (switchToVisible) {\n result.reMake = true;\n }\n }\n });\n }\n\n updateSeriesSpec(result: IUpdateSpecResult) {\n // 长度不同,直接判定为 remake\n if (this._spec.series.length !== this._series.length) {\n result.reMake = true;\n return;\n }\n this._series.forEach(s => {\n const spec = this._spec.series[s.getSpecIndex()];\n mergeUpdateResult(result, s.updateSpec(spec));\n });\n }\n\n getCanvas() {\n return this.getCompiler()?.getCanvas() ?? null;\n }\n\n private _updateLayoutRect(viewBox: IBoundsLike) {\n const canvasRect = this.getCanvasRect();\n let viewRect = canvasRect;\n if (viewBox) {\n this._viewBox = viewBox;\n const { x1 = 0, y1 = 0, x2, y2 } = viewBox;\n viewRect = {\n width: x2 - x1,\n height: y2 - y1\n };\n } else {\n this._viewBox = { x1: 0, y1: 0, x2: viewRect.width, y2: viewRect.height };\n }\n this._viewRect = viewRect;\n // resize 时 padding 也应该会发生变化 先计算\n this.padding = calcPadding(this._paddingSpec, viewRect, viewRect);\n this._layoutRect.width = viewRect.width - this.padding.left - this.padding.right;\n this._layoutRect.height = viewRect.height - this.padding.top - this.padding.bottom;\n this._layoutRect.x = this.padding.left;\n this._layoutRect.y = this.padding.top;\n\n this._event.emit(ChartEvent.layoutRectUpdate, { chart: this });\n }\n\n /** 设置当前全局主题 */\n setCurrentTheme() {\n // update chart config\n this.updateChartConfig({ change: true, reMake: false }, this._spec);\n\n // 需要重新布局\n this.setLayoutTag(true, null, false);\n\n // 设置色板,只设置 colorScale 的 range\n this.updateGlobalScaleTheme();\n this.reInit();\n }\n\n reInit() {\n [...this._regions, ...this._series, ...this._components].forEach(model => {\n const specInfo = model.getSpecInfo();\n\n if (specInfo && specInfo.spec) {\n // 找不到,说明在更新spec中,组件被注销了\n model.reInit(specInfo.spec);\n }\n });\n }\n\n clear() {\n // call on recompile & release\n this.getAllModels().forEach(i => i.clear?.());\n }\n\n compile() {\n this.compileBackground();\n this.compileLayout();\n this.compileRegions();\n this.compileSeries();\n this.compileComponents();\n }\n\n afterCompile() {\n this.getAllRegions().forEach(r => {\n r.afterCompile?.();\n });\n this.getAllSeries().forEach(s => {\n s.afterCompile?.();\n });\n this.getAllComponents().forEach(c => {\n c.afterCompile?.();\n });\n }\n\n compileLayout() {\n const { width, height } = this.getCanvasRect();\n this.getCompiler().setSize(width, height);\n }\n\n compileBackground() {\n if (!this._backgroundMark) {\n return;\n }\n this._backgroundMark.compile({ context: { model: this } });\n this._backgroundMark.getProduct()?.layout(() => {\n // console.log('region mark layout');\n });\n }\n\n compileRegions() {\n this._option.performanceHook?.beforeRegionCompile?.();\n this.getAllRegions().forEach(r => {\n r.compile();\n });\n this._option.performanceHook?.afterRegionCompile?.();\n }\n\n compileSeries() {\n this._option.performanceHook?.beforeSeriesCompile?.();\n this.getAllSeries().forEach(s => {\n s.compile();\n });\n this._option.performanceHook?.afterSeriesCompile?.();\n }\n\n compileComponents() {\n this._option.performanceHook?.beforeComponentCompile?.();\n this.getAllComponents().forEach(c => {\n c.compile();\n });\n this._option.performanceHook?.afterComponentCompile?.();\n }\n\n release() {\n /* release 前的处理 */\n [...this._components, ...this._regions, ...this._series].forEach(m => {\n m.beforeRelease();\n });\n\n /* 开始 release */\n super.release();\n // clear event , temporary function of chart items\n this.clear();\n\n [...this._components, ...this._regions, ...this._series].forEach(m => {\n m.release();\n });\n this._components = this._regions = this._series = [];\n this._spec = {} as any;\n // FIXME: type lint\n this._dataSet = this._globalScale = this._layoutFunc = null as unknown as any;\n this._layoutTag = false;\n this._idMap.clear();\n }\n\n onLayout(srView: IView) {\n const root = srView.rootMark;\n this.layout({ group: root, srView });\n }\n\n /**\n * 更新或设置图元状态\n * @param state 状态筛选器\n * @param filter 筛选器\n */\n updateState(\n state: Record<string, Omit<IMarkStateSpec<unknown>, 'style'>>,\n filter?: (series: ISeries, mark: IMark, stateKey: string) => boolean //series + mark 筛选\n ): void {\n const seriesArr = this.getAllSeries();\n for (const key in state) {\n if (isEmpty(state[key])) {\n continue;\n }\n const stateSpec = state[key];\n let stateInfo: IStateInfo = { stateValue: key };\n if (isFunction(stateSpec.filter)) {\n stateInfo = { filter: stateSpec.filter, ...stateInfo };\n } else {\n stateInfo = { ...stateSpec.filter, ...stateInfo };\n }\n if (stateSpec.level) {\n stateInfo.level = stateSpec.level;\n }\n seriesArr.forEach(series => {\n series.getMarks().forEach(m => {\n if (!m.stateStyle[key]) {\n return;\n }\n if (!filter || filter(series, m, key)) {\n m.state.changeStateInfo(stateInfo);\n m.updateMarkState(key);\n }\n });\n });\n }\n }\n\n /**\n * 更新图元选中状态\n * @param datum hover 图元数据\n * @param filter 筛选器 用来筛选系列与mark\n * @param region region 筛选器\n */\n setSelected(\n datum: MaybeArray<any> | null,\n filter?: (series: ISeries, mark: IMark) => boolean,\n region?: IRegionQuerier\n ): void {\n this._setStateInDatum(STATE_VALUE_ENUM.STATE_SELECTED, true, datum, filter, region);\n }\n\n /**\n * 更新图元 hover 状态\n * @param datum hover 图元数据\n * @param filter 筛选器 用来筛选系列与mark\n * @param region region 筛选器\n */\n setHovered(\n datum: MaybeArray<Datum> | null,\n filter?: (series: ISeries, mark: IMark) => boolean,\n region?: IRegionQuerier\n ): void {\n this._setStateInDatum(STATE_VALUE_ENUM.STATE_HOVER, true, datum, filter, region);\n }\n\n /**\n * 清除所有图元的状态\n *\n * @since 1.11.0\n */\n clearState(state: string) {\n this.getAllRegions().forEach(r => {\n r.interaction.clearEventElement(state, true);\n r.interaction.resetInteraction(state, null);\n return;\n });\n }\n\n /**\n * 清除所有图元的所有状态\n *\n * @since 1.12.4\n */\n clearAllStates() {\n this.getAllRegions().forEach(r => {\n r.interaction.clearAllEventElement();\n r.interaction.resetAllInteraction();\n return;\n });\n }\n\n /**\n * 清除所有图元的选中状态\n *\n * @since 1.11.0\n */\n clearSelected() {\n this.clearState(STATE_VALUE_ENUM.STATE_SELECTED);\n }\n\n /**\n * 清除所有图元的hover状态\n *\n * @since 1.11.0\n */\n clearHovered() {\n this.clearState(STATE_VALUE_ENUM.STATE_HOVER);\n }\n\n private _initEvent() {\n [ChartEvent.dataZoomChange, ChartEvent.scrollBarChange].forEach(event => {\n this._event.on(event, ({ value }) => {\n this._disableMarkAnimation(['exit', 'update']);\n const enableMarkAnimate = () => {\n this._enableMarkAnimation(['exit', 'update']);\n this._event.off(VGRAMMAR_HOOK_EVENT.AFTER_MARK_RENDER_END, enableMarkAnimate);\n };\n this._event.on(VGRAMMAR_HOOK_EVENT.AFTER_MARK_RENDER_END, enableMarkAnimate);\n });\n });\n }\n\n protected _enableMarkAnimation(states: string | string[]) {\n const marks = this.getAllMarks();\n marks.forEach(mark => {\n const product = mark.getProduct();\n if (product && product.animate) {\n product.animate.enableAnimationState(states);\n }\n });\n }\n\n protected _disableMarkAnimation(states: string | string[]) {\n const marks = this.getAllMarks();\n marks.forEach(mark => {\n const product = mark.getProduct();\n if (product && product.animate) {\n product.animate.disableAnimationState(states);\n }\n });\n }\n\n protected _setStateInDatum(\n stateKey: string,\n checkReverse: boolean,\n datum: MaybeArray<Datum> | null,\n filter?: (series: ISeries, mark: IMark) => boolean,\n region?: IRegionQuerier\n ) {\n datum = datum ? array(datum) : null;\n const keys = !datum ? null : Object.keys(datum[0]);\n this.getRegionsInQuerier(region).forEach(r => {\n if (!datum) {\n r.interaction.clearEventElement(stateKey, true);\n return;\n }\n r.getSeries().forEach(s => {\n s.getMarks().forEach(m => {\n if (!m.getProduct()) {\n return;\n }\n if (!filter || (isFunction(filter) && filter(s, m))) {\n const isCollect = m.getProduct().isCollectionMark();\n const elements = m.getProduct().elements;\n let pickElements = [] as IElement[];\n if (isCollect) {\n pickElements = elements.filter(e => {\n const elDatum = e.getDatum();\n // eslint-disable-next-line max-nested-callbacks, eqeqeq\n (datum as Datum[]).every((d, index) => keys.every(k => d[k] == elDatum[index][k]));\n });\n } else {\n if (datum.length > 1) {\n const datumTemp = (datum as Datum[]).slice();\n pickElements = elements.filter(e => {\n if (datumTemp.length === 0) {\n return false;\n }\n const elDatum = e.getDatum();\n // eslint-disable-next-line max-nested-callbacks, eqeqeq\n const index = datumTemp.findIndex(d => keys.every(k => d[k] == elDatum[k]));\n if (index >= 0) {\n datumTemp.splice(index, 1);\n return true;\n }\n return false;\n });\n } else {\n // eslint-disable-next-line eqeqeq\n const el = elements.find(e => keys.every(k => datum[0][k] == e.getDatum()[k]));\n el && (pickElements = [el]);\n }\n }\n pickElements.forEach(element => {\n r.interaction.startInteraction(stateKey, element);\n });\n }\n });\n });\n if (checkReverse) {\n r.interaction.reverseEventElement(stateKey);\n }\n });\n }\n\n /**\n * setDimensionIndex could trigger mark state, tooltip, crosshair\n * @param value dimension value\n * @param opt option for set trigger\n */\n setDimensionIndex(value: StringOrNumber, opt: DimensionIndexOption) {\n // event\n let dimensionInfo: IDimensionInfo[] | null = null;\n Array.from(this._event.getComposedEventMap().values()).forEach(e => {\n const { eventType, event } = e;\n if (eventType === DimensionEventEnum.dimensionHover || eventType === DimensionEventEnum.dimensionClick) {\n const info = event.dispatch(value, opt) as [];\n if (info?.length) {\n dimensionInfo = info;\n }\n }\n });\n const isUnableValue =\n isNil(value) || !dimensionInfo || dimensionInfo.every(d => isDiscrete(d.axis.getScale().type) && isNil(d.index));\n // tooltip\n if (opt.tooltip !== false) {\n const tooltip = this.getComponentsByType(ComponentTypeEnum.tooltip)[0] as unknown as ITooltip;\n\n if (tooltip?.getVisible()) {\n if (isUnableValue) {\n (<any>tooltip).hideTooltip?.();\n } else {\n const dataFilter = {};\n dimensionInfo.forEach((d: IDimensionInfo) => {\n const { axis, value, data } = d;\n const isY = axis.getOrient() === 'left' || axis.getOrient() === 'right';\n data.forEach(d => {\n const field = isY ? (<ICartesianSeries>d.series).fieldY[0] : (<ICartesianSeries>d.series).fieldX[0];\n\n dataFilter[field] = d.datum?.[0]?.[field] ?? value;\n });\n });\n tooltip.showTooltip(dataFilter, opt.showTooltipOption);\n }\n }\n }\n if (opt.crosshair !== false) {\n const crosshair = this.getComponentsByType(ComponentTypeEnum.cartesianCrosshair)[0] as unknown as ICrossHair;\n\n if (crosshair && crosshair.clearAxisValue && crosshair.setAxisValue) {\n if (isUnableValue) {\n crosshair.hideCrosshair();\n } else {\n crosshair.showCrosshair(dimensionInfo as { axis: IAxis; value: string | number }[]);\n }\n }\n }\n }\n\n getColorScheme() {\n return this._option.getTheme?.().colorScheme;\n }\n}\n"]}
|
package/esm/chart/index.js
CHANGED
|
@@ -62,4 +62,5 @@ import { PictogramChart, registerPictogramChart } from "./pictogram/pictogram";
|
|
|
62
62
|
|
|
63
63
|
export { AreaChart, BarChart, Bar3dChart, BoxPlotChart, CirclePackingChart, CommonChart, FunnelChart, Funnel3dChart, GaugeChart, HeatmapChart, HistogramChart, Histogram3dChart, LineChart, MapChart, PieChart, Pie3dChart, CircularProgressChart, LinearProgressChart, RadarChart, RangeColumnChart, RangeColumn3dChart, RangeAreaChart, RoseChart, SankeyChart, ScatterChart, SunburstChart, SequenceChart, WaterfallChart, CorrelationChart, LiquidChart, WordCloudChart, WordCloud3dChart, TreemapChart, VennChart, BaseChart, MosaicChart, PictogramChart };
|
|
64
64
|
|
|
65
|
-
export { registerLineChart, registerAreaChart, registerBarChart, registerBar3dChart, registerBoxplotChart, registerCirclePackingChart, registerCircularProgressChart, registerCommonChart, registerFunnelChart, registerFunnel3dChart, registerGaugeChart, registerHeatmapChart, registerHistogramChart, registerHistogram3dChart, registerLinearProgressChart, registerMapChart, registerPie3dChart, registerPieChart, registerRadarChart, registerRangeAreaChart, registerRangeColumn3dChart, registerRangeColumnChart, registerRoseChart, registerSankeyChart, registerScatterChart, registerSequenceChart, registerSunburstChart, registerTreemapChart, registerWaterfallChart, registerWordCloud3dChart, registerWordCloudChart, registerCorrelationChart, registerLiquidChart, registerWordCloudShapeChart, registerVennChart, registerMosaicChart, registerPictogramChart };
|
|
65
|
+
export { registerLineChart, registerAreaChart, registerBarChart, registerBar3dChart, registerBoxplotChart, registerCirclePackingChart, registerCircularProgressChart, registerCommonChart, registerFunnelChart, registerFunnel3dChart, registerGaugeChart, registerHeatmapChart, registerHistogramChart, registerHistogram3dChart, registerLinearProgressChart, registerMapChart, registerPie3dChart, registerPieChart, registerRadarChart, registerRangeAreaChart, registerRangeColumn3dChart, registerRangeColumnChart, registerRoseChart, registerSankeyChart, registerScatterChart, registerSequenceChart, registerSunburstChart, registerTreemapChart, registerWaterfallChart, registerWordCloud3dChart, registerWordCloudChart, registerCorrelationChart, registerLiquidChart, registerWordCloudShapeChart, registerVennChart, registerMosaicChart, registerPictogramChart };
|
|
66
|
+
//# sourceMappingURL=index.js.map
|
package/esm/core/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { VChart } from './vchart';
|
|
2
2
|
import { Factory } from './factory';
|
|
3
3
|
export { VChart, Factory };
|
|
4
|
-
export declare const version = "1.13.
|
|
4
|
+
export declare const version = "1.13.6-alpha.0";
|
|
5
5
|
export type { IVChart } from './interface';
|
|
6
6
|
export type { IStateSpec, StateValueType } from '../compile/mark';
|
|
7
7
|
export type { IRegion } from '../region/interface';
|