@visactor/vchart 2.0.3-alpha.2 → 2.0.3

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/mark/base/base-mark.ts"],"names":[],"mappings":"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","file":"base-mark.js","sourcesContent":["import { DiffState } from '../interface/enum';\nimport { type IStateInfo, type IModelMarkAttributeContext, STATE_VALUE_ENUM } from '../../compile/mark/interface';\nimport type { BaseSeries } from '../../series/base/base-series';\nimport type {\n Datum,\n IMarkSpec,\n ConvertToMarkStyleSpec,\n GradientStop,\n IVisual,\n IVisualScale,\n IVisualSpecStyle,\n ICommonSpec,\n FunctionType,\n ValueType,\n StringOrNumber,\n Maybe\n} from '../../typings';\nimport type { DataView } from '@visactor/vdataset';\nimport { mergeSpec } from '@visactor/vutils-extension';\nimport { Color } from '../../util/color';\nimport { createScaleWithSpec } from '../../util/scale';\nimport { MarkTypeEnum } from '../interface';\nimport type {\n IMarkRaw,\n IMarkStateStyle,\n IMarkStyle,\n IMark,\n IMarkOption,\n StyleConvert,\n VisualScaleType,\n MarkInputStyle,\n GroupedData,\n IAttrs,\n IMarkGraphic,\n DiffStateValues,\n ProgressiveContext,\n IProgressiveTransformResult,\n MarkType,\n AnimationStateValues\n} from '../interface';\nimport { GradientType, DEFAULT_GRADIENT_CONFIG } from '../../constant/gradient';\nimport { AttributeLevel } from '../../constant/attribute';\nimport { isValidScaleType } from '@visactor/vscale';\nimport { computeActualDataScheme, getDataScheme } from '../../theme/color-scheme/util';\nimport type { ISeries } from '../../series/interface';\nimport { MarkStateManager } from '../../compile/mark';\nimport type {\n ICompilableMark,\n IMarkCompileOption,\n IMarkConfig,\n IMarkStateManager,\n StateValueType\n} from '../../compile/mark/interface';\nimport { array, degreeToRadian, isArray, isBoolean, isFunction, isNil, isObject, isValid } from '@visactor/vutils';\nimport { curveTypeTransform, groupData, runEncoder } from '../utils/common';\nimport type { ICompilableInitOption } from '../../compile/interface';\nimport { LayoutState } from '../../compile/interface';\nimport type { IGroupGraphicAttribute, IGraphicAttribute, IGroup, IGraphic } from '@visactor/vrender-core';\nimport { createGroup, CustomPath2D } from '@visactor/vrender-core';\nimport { isStateAttrChangeable } from '../../compile/mark/util';\nimport { Factory } from '../../core/factory';\nimport { DEFAULT_DATA_KEY } from '../../constant/data';\nimport { GrammarItem } from '../../compile/grammar-item';\nimport { LayoutZIndex } from '../../constant/layout';\nimport type { IModel } from '../../model/interface';\nimport type { ICompilableData } from '../../compile/data/interface';\nimport type { IAnimationConfig } from '../../animation/interface';\nimport { AnimationStateEnum, type MarkAnimationSpec } from '../../animation/interface';\nimport { CompilableData } from '../../compile/data/compilable-data';\nimport { getDiffAttributesOfGraphic } from '../../util/mark';\nimport { log } from '../../util/debug';\nimport { morph as runMorph } from '../../compile/morph';\n\nexport type ExChannelCall = (\n key: string | number | symbol,\n datum: Datum,\n states: StateValueType,\n baseValue: unknown\n) => unknown;\n\nexport class BaseMark<T extends ICommonSpec> extends GrammarItem implements IMarkRaw<T> {\n /** 类型 */\n readonly type: MarkType = undefined as unknown as MarkType;\n\n /** name */\n readonly name: string = 'mark';\n\n /** key field */\n readonly key: ICompilableMark['key'];\n\n protected _markConfig: IMarkConfig = {\n zIndex: LayoutZIndex.Mark,\n /** morph动画关联关系配置 */\n morph: false\n };\n\n protected _isCommited?: boolean;\n\n commit(render?: boolean, recursion?: boolean) {\n if (recursion && this.getMarks().length > 0) {\n this.getMarks().forEach(m => m.commit(false, recursion));\n }\n\n this._isCommited = true;\n if (render) {\n this.getCompiler().renderNextTick();\n }\n }\n\n uncommit() {\n this._isCommited = false;\n }\n\n isCommited() {\n return this._isCommited;\n }\n\n getMarkConfig(): IMarkConfig {\n return this._markConfig;\n }\n setMarkConfig(config: IMarkConfig) {\n Object.keys(config).forEach(key => {\n (this._markConfig as any)[key] = (config as any)[key];\n });\n }\n\n /** 可见性 */\n protected _visible: boolean = true;\n getVisible() {\n return this._visible;\n }\n setVisible(visible: boolean) {\n this._visible = visible;\n }\n\n /**\n * 用户设置的 id\n */\n protected _userId: StringOrNumber;\n getUserId() {\n return this._userId;\n }\n setUserId(userId: StringOrNumber) {\n if (isValid(userId)) {\n this._userId = userId;\n }\n }\n\n /** parent model */\n readonly model: IModel;\n\n /** 数据(可以没有) */\n protected _data: ICompilableData;\n getDataView(): DataView | undefined {\n return this._data?.getDataView();\n }\n setDataView(d?: DataView) {\n if (isNil(this._data)) {\n this.initMarkData(this._option);\n }\n this._data.setDataView(d);\n }\n getData() {\n return this._data;\n }\n setData(d?: ICompilableData) {\n this._data = d;\n if (d) {\n d.addRelatedMark(this);\n }\n }\n\n /** 默认的stateStyle */\n stateStyle: IMarkStateStyle<T> = {};\n\n /** 状态管理器 */\n state: IMarkStateManager;\n\n protected _unCompileChannel: { [key in string]: boolean } = {};\n\n hasState(state: string) {\n return state in this.state.getStateMap();\n }\n getState(state: string) {\n return this.state.getStateMap()[state];\n }\n\n protected _animationConfig: Partial<MarkAnimationSpec>;\n getAnimationConfig() {\n return this._animationConfig;\n }\n\n setAnimationConfig(config: Partial<MarkAnimationSpec>) {\n // group mark 动画默认只挂到自己\n const defaultPrams = this.type === 'group' ? { selfOnly: true } : {};\n const formatAnimationCfg = (cfg: IAnimationConfig) => {\n const options = (cfg as any)!.options ?? {};\n\n return {\n ...defaultPrams,\n ...cfg,\n options: (datum: any, graphic: IMarkGraphic, customParams: any) => {\n const _options = typeof options === 'function' ? options(datum, graphic, customParams) : options;\n\n if (graphic && graphic.context && graphic.context.compiler && isValid(graphic.context.modelId)) {\n const model = graphic.context.compiler.getChart()?.getModelById(graphic.context.modelId);\n\n return {\n ..._options,\n layoutRect: (model as any)?.getLayoutRect?.()\n };\n }\n\n return {\n ..._options\n };\n }\n };\n };\n\n // 封装options,批量添加一些默认参数\n const animationConfig: Partial<MarkAnimationSpec> = {};\n\n Object.keys(config).forEach(key => {\n const value = (config as any)[key];\n if (isArray(value)) {\n (animationConfig as any)[key] = value.map(formatAnimationCfg);\n } else if (isValid(value)) {\n (animationConfig as any)[key] = formatAnimationCfg(value);\n }\n });\n this._animationConfig = animationConfig;\n }\n\n protected _disabledAnimationStates?: string[] = [];\n\n disableAnimationByState(state: string | string[]) {\n const states = array(state);\n this._disabledAnimationStates = [...new Set([...this._disabledAnimationStates, ...states])];\n }\n\n enableAnimationByState(state: string | string[]) {\n const states = array(state);\n this._disabledAnimationStates = this._disabledAnimationStates.filter(s => !states.includes(s));\n }\n\n /** 布局标记 */\n private _skipBeforeLayouted = false;\n\n setSkipBeforeLayouted(skip: boolean) {\n this._skipBeforeLayouted = skip;\n }\n protected _groupKey?: string;\n setGroupKey(groupKey: string) {\n this._groupKey = groupKey;\n }\n\n protected _stateSort?: (stateA: string, stateB: string) => number;\n\n protected declare _product: Maybe<IGroup>;\n getProduct() {\n return this._product;\n }\n\n // 保存上一次的mark,用于morph的时候获取上次的图元\n protected declare _lastMark?: IMark;\n\n /** 初始化 mark data */\n protected initMarkData(option: ICompilableInitOption) {\n this._data = new CompilableData(option);\n\n this._data.addRelatedMark(this);\n }\n\n protected _compileProduct(option?: IMarkCompileOption) {\n this.commit();\n this._context = option?.context;\n const product = this.getProduct();\n // 处理 visible 为 false 的情况\n if (!this._visible) {\n if (isValid(product)) {\n this.removeProduct();\n }\n return;\n } else if (isValid(product)) {\n if (option.group && product.parent !== option.group) {\n option.group.appendChild(product);\n }\n } else {\n const compiler = this.getCompiler();\n if (!compiler.isInited) {\n return;\n }\n this._initProduct(option?.group);\n }\n\n if (isNil(this._product)) {\n return;\n }\n this.compileData();\n this.compileState();\n this.compileEncode();\n // this.compileContext(option?.context);\n // this.compileTransform();\n }\n\n /** 创建语法元素对象 */\n protected _initProduct(group?: IGroup) {\n const stage = this.getStage();\n\n if (!stage) {\n return;\n }\n\n // 声明语法元素\n const id = this.getProductId();\n\n this._product = createGroup(\n this.type !== MarkTypeEnum.group\n ? {\n pickable: false,\n zIndex: this._markConfig.zIndex,\n overflow: this._markConfig.overflow\n }\n : {}\n );\n // todo 为了和之前的版本兼容,这里暂时设置成name\n this._product.name = id;\n // 为了从graphic上能索引到mark\n this._product.mark = this;\n\n (group ?? this.getCompiler()?.getRootGroup()).appendChild(this._product);\n\n // if (this.name && this._product) {\n // this._product.name = this.name;\n // }\n this._compiledProductId = id;\n }\n\n generateProductId() {\n if (this._userId) {\n return `${this._userId}`;\n }\n return `${this.name}_${this.id}`;\n }\n\n layout(layout: () => void) {\n // todo\n }\n\n compileData() {\n if (isNil(this._data)) {\n return;\n }\n this._data.compile();\n\n // 绑定数据\n // const dataProduct = this._data.getProduct();\n // if (isValid(this._product) && isValid(dataProduct)) {\n // // this._product.join(dataProduct as IData, this.key, undefined, this.getGroupKey());\n // }\n }\n\n // protected _separateStyle() {\n // const { [STATE_VALUE_ENUM.STATE_NORMAL]: normalStyle } = this.stateStyle;\n\n // const enterStyles: Record<string, MarkFunctionType<any>> = this._option.noSeparateStyle ? null : {};\n // const updateStyles: Record<string, MarkFunctionType<any>> = {};\n // Object.keys(normalStyle).forEach(key => {\n // if (this._unCompileChannel[key]) {\n // return;\n // }\n\n // if (this._option.noSeparateStyle || isStateAttrChangeable(key, normalStyle, this.getGroupKey())) {\n // updateStyles[key] = {\n // callback: this._computeAttribute(key, 'normal'),\n // dependency: [this.stateKeyToSignalName('markUpdateRank')]\n // };\n // } else {\n // enterStyles[key] = this._computeAttribute(key, 'normal');\n // }\n // });\n // return { enterStyles, updateStyles };\n // }\n\n compileEncode() {\n // const { [STATE_VALUE_ENUM.STATE_NORMAL]: normalStyle, ...temp } = this.stateStyle;\n // const { enterStyles, updateStyles } = this._separateStyle();\n // const encoders: any = {\n // update: updateStyles,\n // group: enterStyles\n // };\n // Object.keys(temp).forEach(state => {\n // const styles: Record<string, MarkFunctionType<any>> = {};\n // Object.keys(temp[state]).forEach(key => {\n // if (this._unCompileChannel[key]) {\n // return;\n // }\n // styles[key] = {\n // callback: this._computeAttribute(key, state),\n // dependency: [this.stateKeyToSignalName('markUpdateRank')]\n // };\n // });\n // encoders[state] = styles;\n // });\n // // 在布局完成前不进行encode\n // if (this._skipBeforeLayouted) {\n // }\n }\n\n compileState() {\n // this.state.compileState(this, this._stateSort);\n }\n\n compileAnimation() {\n // if (this._animationConfig) {\n // let stateSignal: any;\n // if (this.type === 'component') {\n // // 组件有自己的动画状态\n // stateSignal = (this.model as IComponent).animate?.getAnimationStateSignalName();\n // } else {\n // const region = (this.model as ISeries).getRegion?.();\n // stateSignal = region?.animate?.getAnimationStateSignalName();\n // }\n // this._product.animation(this._animationConfig);\n // this._product.animationState({\n // callback: (datum: Datum, element: IElement, parameters: Record<string, any>) => {\n // return parameters[stateSignal]?.callback(datum, element);\n // },\n // dependency: stateSignal\n // });\n // if (this._animationConfig.normal) {\n // if (!this._animationConfig.appear) {\n // this._event.on(VGRAMMAR_HOOK_EVENT.AFTER_DO_RENDER, () => {\n // this.runAnimationByState(AnimationStateEnum.normal);\n // });\n // } else {\n // this._event.on(VGRAMMAR_HOOK_EVENT.ANIMATION_END, ({ event }) => {\n // if (event.mark === this.getProduct() && event.animationState === AnimationStateEnum.appear) {\n // this.runAnimationByState(AnimationStateEnum.normal);\n // }\n // });\n // }\n // }\n // }\n }\n\n _context: any;\n\n compileContext(extraContext?: any) {\n // const config: IMarkConfig = {\n // ...this._markConfig,\n // context: {\n // }\n // };\n\n this._context = {\n markId: this.id,\n modelId: this.model.id,\n markUserId: this._userId,\n modelUserId: this.model.userId,\n ...extraContext\n };\n }\n\n getContext() {\n return this._context;\n }\n\n protected compileTransform() {\n // if (this._transform?.length) {\n // this.getProduct().transform(this._transform);\n // }\n }\n\n updateState(newState: Record<string, unknown>, noRender?: boolean) {\n this.commit();\n\n return this.state.updateState(newState, noRender);\n }\n\n getMarks(): IMark[] {\n return [];\n }\n\n runAnimationByState(state?: string) {\n // return this.getProduct()?.animate?.runAnimationByState(state);\n }\n\n stopAnimationByState(state?: string) {\n // return this.getProduct()?.animate?.stopAnimationByState(state);\n }\n\n pauseAnimationByState(state?: string) {\n // return this.getProduct()?.animate?.pauseAnimationByState(state);\n }\n\n resumeAnimationByState(state?: string) {\n // return this.getProduct()?.animate?.resumeAnimationByState(state);\n }\n\n removeProduct() {\n if (this._product && this._product.parent) {\n this._product.parent.removeChild(this._product);\n }\n this._product = null;\n this._compiledProductId = null;\n }\n release() {\n // if (this._product && this._product.parent) {\n // this._product.parent.removeChild(this._product);\n // }\n\n this.state.release();\n super.release();\n this._lastMark = null;\n }\n\n protected _simpleStyle: T;\n\n setSimpleStyle(s: T) {\n this._simpleStyle = s;\n }\n\n getSimpleStyle(): T {\n return this._simpleStyle;\n }\n\n protected declare _option: IMarkOption;\n\n protected _attributeContext: IModelMarkAttributeContext;\n\n protected _encoderOfState: Record<string, Record<string, (datum: Datum) => any>>;\n\n /** by _unCompileChannel, some channel need add default channel to make sure update available */\n _extensionChannel: {\n [key: string | number | symbol]: string[];\n } = {};\n /** same as _extensionChannel. when compute channel, add extension channel effect */\n _computeExChannel: {\n [key: string | number | symbol]: ExChannelCall;\n } = {};\n\n constructor(name: string, option: IMarkOption) {\n super(option);\n this.name = name;\n this.model = option.model;\n this.key = option.key;\n this.state = new MarkStateManager(option, this as unknown as IMark) as unknown as IMarkStateManager;\n // 这里的上下文多数情况下与 mark 是什么是没有关系的,与mark的使用者,也就是series,component有的逻辑有关。\n this._attributeContext = option.attributeContext;\n option.map?.set(this.id, this as unknown as IMark);\n }\n\n created(): void {\n this._initStyle();\n }\n\n /**\n * 外部调用,根据 spec 初始化 style(如果由 IModel 派生类调用,请使用 IModel.initMarkStyleWithSpec)\n * @param spec\n * @param key\n * @returns\n */\n initStyleWithSpec(spec: IMarkSpec<T>) {\n if (!spec) {\n return;\n }\n\n if (isValid(spec.id)) {\n this._userId = spec.id;\n }\n\n // interactive\n if (isBoolean(spec.interactive)) {\n this._markConfig.interactive = spec.interactive;\n }\n // zIndex\n if (isValid(spec.zIndex)) {\n this._markConfig.zIndex = spec.zIndex;\n }\n // visible\n if (isBoolean(spec.visible)) {\n this.setVisible(spec.visible);\n }\n\n this._markConfig.setCustomizedShape = spec.customShape;\n\n this._stateSort = spec.stateSort;\n\n // style\n this._initSpecStyle(spec);\n }\n\n protected _transformStyleValue<T>(\n styleConverter: StyleConvert<T>,\n transform: (value: ValueType<T>) => ValueType<T>\n ): StyleConvert<any> {\n if ((styleConverter as VisualScaleType).scale) {\n const scale = (styleConverter as VisualScaleType).scale;\n const range = scale.range();\n scale.range(range.map(transform));\n return styleConverter as StyleConvert<T>;\n } else if (typeof styleConverter === 'function') {\n return ((...args) => {\n return transform((styleConverter as FunctionType<number>)(...args) as ValueType<T>);\n }) as StyleConvert<T>;\n }\n return transform(styleConverter as ValueType<T>);\n }\n\n convertAngleToRadian(styleConverter: StyleConvert<number>) {\n // 用户传入的角度配置,需要做一层转换\n return this._transformStyleValue(styleConverter, degreeToRadian);\n }\n\n isUserLevel(level: number) {\n return [\n AttributeLevel.User_Mark,\n AttributeLevel.User_Series,\n AttributeLevel.User_Chart,\n AttributeLevel.User_SeriesStyle\n ].includes(level);\n }\n\n /**\n * 由外部series调用,设置markStyle的接口(如果由 IModel 派生类调用,请使用 IModel.setMarkStyle)\n * @param style\n * @param level\n * @param state\n */\n setStyle<U extends keyof T>(\n style: Partial<IMarkStyle<T>>,\n state: StateValueType = 'normal',\n level: number = 0\n ): void {\n if (isNil(style)) {\n return;\n }\n\n if (this.stateStyle[state] === undefined) {\n this.stateStyle[state] = {};\n }\n\n const isUserLevel = this.isUserLevel(level);\n\n Object.keys(style).forEach((attr: string) => {\n let attrStyle = style[attr] as MarkInputStyle<T[U]>;\n if (isNil(attrStyle)) {\n return;\n }\n\n attrStyle = this._filterAttribute(attr as any, attrStyle, state, level, isUserLevel);\n\n this.setAttribute(attr as any, attrStyle, state, level);\n });\n }\n\n getStyle(key: string, state: StateValueType = 'normal'): any {\n return this.stateStyle[state][key]?.style;\n }\n\n /** 过滤单个 attribute */\n protected _filterAttribute<U extends keyof T>(\n attr: U,\n style: MarkInputStyle<T[U]>,\n state: StateValueType,\n level: number,\n isUserLevel: boolean\n ): StyleConvert<T[U]> {\n let newStyle = this._styleConvert(style);\n if (isUserLevel) {\n switch (attr) {\n case 'angle':\n newStyle = this.convertAngleToRadian(newStyle);\n break;\n case 'innerPadding':\n case 'outerPadding':\n // VRender 的 padding 定义基于 centent-box 盒模型,默认正方向是向外扩,与 VChart 不一致。这里将 padding 符号取反\n newStyle = this._transformStyleValue(newStyle, (value: number) => -value);\n break;\n case 'curveType':\n newStyle = this._transformStyleValue(newStyle, (value: string) =>\n curveTypeTransform(value, (this._option.model as any).direction)\n );\n break;\n }\n }\n return newStyle;\n }\n\n /**\n * TODO: 没有外部调用\n * 设置mark样式所参考的图元\n */\n setReferer<U extends keyof T>(mark: IMarkRaw<T>, styleKey?: U, state?: StateValueType) {\n if (!mark) {\n return;\n }\n if (styleKey && state) {\n const style = this.stateStyle[state] ?? { [styleKey]: {} };\n this.stateStyle[state][styleKey] = {\n ...(style[styleKey] as unknown as any),\n ...{ referer: mark }\n };\n return;\n }\n\n Object.entries(this.stateStyle).forEach(([state, style]) => {\n Object.entries(style).forEach(([styleKey, style]) => {\n this.stateStyle[state][styleKey].referer = mark;\n });\n });\n }\n\n setPostProcess<U extends keyof T>(key: U, postProcessFunc: any, state: StateValueType = 'normal') {\n if (this.stateStyle[state]?.[key]) {\n this.stateStyle[state][key].postProcess = postProcessFunc;\n }\n }\n\n getAttribute<U extends keyof T>(key: U, datum: Datum, state: StateValueType = 'normal') {\n return this._computeAttribute(key, state)(datum);\n }\n\n getAttributesOfState(datum: Datum, state: StateValueType = 'normal') {\n const style = this.stateStyle[state];\n\n if (style) {\n const res: any = {};\n Object.keys(style).forEach(k => {\n if (!this._unCompileChannel[k]) {\n res[k] = this._computeAttribute(k, state)(datum);\n }\n });\n return res;\n }\n }\n\n setAttribute<U extends keyof T>(\n attr: U,\n style: MarkInputStyle<T[U]>,\n state: StateValueType = 'normal',\n level: number = 0\n ) {\n if (this.stateStyle[state] === undefined) {\n this.stateStyle[state] = {};\n }\n\n if (this.stateStyle[state][attr] === undefined) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this.stateStyle[state][attr] = {\n level,\n style,\n referer: undefined\n };\n }\n const attrLevel = this.stateStyle[state][attr]?.level;\n if (isValid(attrLevel) && attrLevel <= level) {\n mergeSpec(this.stateStyle[state][attr], { style, level });\n }\n\n // some attr has extension channel in VChart to make some effect\n if (state !== 'normal') {\n if (attr in this._extensionChannel) {\n this._extensionChannel[attr].forEach(key => {\n if (this.stateStyle[state][key] === undefined) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this.stateStyle[state][key as keyof T] = this.stateStyle.normal[key];\n }\n });\n }\n }\n }\n\n /**\n * 与 vgrammar 默认值一致的样式可以不设置默认值或设置为undefined, 减少encode属性\n */\n protected _getDefaultStyle() {\n return {\n visible: true,\n // mark的层级应该在mark层 不在encode属性层\n // zIndex: LayoutZIndex.Mark,\n x: 0,\n y: 0\n } as IMarkStyle<T>;\n }\n\n // /**\n // * 获取该 mark 不支持的图形属性,由子类覆写\n // * @returns\n // */\n // protected getIgnoreAttributes(): string[] {\n // return [];\n // }\n\n protected _styleConvert<U extends keyof T>(style?: MarkInputStyle<T[U]>): StyleConvert<T[U]> | undefined {\n if (!style) {\n return style as undefined;\n }\n // visual spec 转换为 scale 类型的mark style\n if (isValidScaleType((style as IVisualSpecStyle<unknown, T[U]>).type) || (style as IVisualScale).scale) {\n // const _style = style as IVisual<T[U]>;\n const scale = createScaleWithSpec(style as IVisual<T[U]>, {\n globalScale: this._option.globalScale,\n seriesId: this._option.seriesId\n });\n if (scale) {\n return {\n scale,\n field: (style as IVisual<T[U]>).field,\n changeDomain: (style as IVisualScale).changeDomain\n };\n }\n }\n return style as StyleConvert<T[U]>;\n }\n\n protected _computeAttribute<U extends keyof T>(key: U, state: StateValueType) {\n let stateStyle = this.stateStyle[state]?.[key];\n if (!stateStyle) {\n stateStyle = this.stateStyle.normal[key];\n }\n const baseValueFunctor = this._computeStateAttribute(stateStyle, key, state);\n const hasPostProcess = isFunction(stateStyle?.postProcess);\n const hasExCompute = key in this._computeExChannel;\n\n if (hasPostProcess && hasExCompute) {\n const exCompute = this._computeExChannel[key];\n return (datum: Datum) => {\n let baseValue = baseValueFunctor(datum);\n\n baseValue = stateStyle.postProcess(baseValue, datum, this._attributeContext, this.getDataView());\n\n return exCompute(key, datum, state, baseValue);\n };\n } else if (hasPostProcess) {\n return (datum: Datum) => {\n return stateStyle.postProcess(baseValueFunctor(datum), datum, this._attributeContext, this.getDataView());\n };\n } else if (hasExCompute) {\n const exCompute = this._computeExChannel[key];\n return (datum: Datum) => {\n return exCompute(key, datum, state, baseValueFunctor(datum));\n };\n }\n return baseValueFunctor;\n }\n\n protected _computeStateAttribute<U extends keyof T>(stateStyle: any, key: U, state: StateValueType) {\n if (!stateStyle) {\n return (datum: Datum) => undefined as any;\n }\n if (stateStyle.referer) {\n return stateStyle.referer._computeAttribute(key, state);\n }\n if (!stateStyle.style) {\n return (datum: Datum) => stateStyle.style;\n }\n\n if (typeof stateStyle.style === 'function') {\n return (datum: Datum) => stateStyle.style(datum, this._attributeContext, { mark: this }, this.getDataView());\n }\n\n if (GradientType.includes(stateStyle.style.gradient)) {\n // 渐变色处理,支持各个属性回调\n return this._computeGradientAttr(stateStyle.style);\n }\n\n if (['outerBorder', 'innerBorder'].includes(key as string)) {\n // 内外描边处理,支持各个属性回调\n return this._computeBorderAttr(stateStyle.style);\n }\n\n if (isValidScaleType(stateStyle.style.scale?.type)) {\n return (datum: Datum) => {\n let data = datum;\n if (this.model.modelType === 'series' && (this.model as unknown as ISeries).getMarkData) {\n data = (this.model as unknown as ISeries).getMarkData(datum);\n }\n\n return stateStyle.style.scale.scale(data[stateStyle.style.field]);\n };\n }\n return (datum: Datum) => {\n return stateStyle.style;\n };\n }\n\n private _initStyle(): void {\n const defaultStyle = this._getDefaultStyle();\n this.setStyle(defaultStyle, 'normal', 0);\n }\n\n private _initSpecStyle(spec: IMarkSpec<T>) {\n // style\n if (spec.style) {\n this.setStyle(spec.style, 'normal', AttributeLevel.User_Mark);\n }\n const state = spec.state;\n if (state) {\n Object.keys(state).forEach(key => {\n const stateTemp = state[key];\n if ('style' in stateTemp) {\n const style = stateTemp.style;\n let stateInfo: IStateInfo = { stateValue: key };\n if ('level' in stateTemp) {\n stateInfo.level = stateTemp.level as number;\n }\n if ('filter' in stateTemp) {\n if (isFunction(stateTemp.filter)) {\n stateInfo = {\n filter: stateTemp.filter as (datum: any, options: Record<string, any>) => boolean,\n ...stateInfo\n };\n } else {\n stateInfo = { ...stateTemp.filter, ...stateInfo };\n }\n }\n this.state.addStateInfo(stateInfo);\n this.setStyle(style as ConvertToMarkStyleSpec<T>, key, AttributeLevel.User_Mark);\n } else {\n this.setStyle(stateTemp, key, AttributeLevel.User_Mark);\n }\n });\n }\n }\n\n private _computeGradientAttr(gradientStyle: any) {\n const { gradient, scale, field, ...rest } = gradientStyle;\n\n let colorScale = scale;\n let colorField = field;\n if ((!scale || !field) && this.model.modelType === 'series') {\n // 目前只有series有这个属性\n const { scale: globalColorScale, field: globalField } = (this.model as BaseSeries<any>).getColorAttribute();\n if (!scale) {\n // 获取全局的 colorScale\n colorScale = globalColorScale;\n }\n if (!colorField) {\n colorField = globalField;\n }\n }\n\n const themeColor = computeActualDataScheme(\n getDataScheme(\n this.model.getColorScheme(),\n this.model.modelType === 'series' ? this.model.getSpec?.() : undefined\n ),\n (this.model as unknown as ISeries).getDefaultColorDomain()\n );\n // 默认配置处理\n const mergedStyle = {\n ...(DEFAULT_GRADIENT_CONFIG as any)[gradient],\n ...rest\n };\n return (data: Datum) => {\n const computeStyle: any = {};\n const markData = this.getDataView();\n Object.keys(mergedStyle).forEach(key => {\n const value = mergedStyle[key];\n if (key === 'stops') {\n computeStyle.stops = value.map((stop: GradientStop) => {\n const { opacity, color, offset } = stop;\n let computeColor = color ?? colorScale?.scale(data[colorField]);\n if (isFunction(color)) {\n computeColor = color(data, this._attributeContext, markData);\n }\n\n if (isValid(opacity)) {\n computeColor = Color.SetOpacity(computeColor as string, opacity);\n }\n\n return {\n offset: isFunction(offset) ? offset(data, this._attributeContext, markData) : offset,\n color: computeColor || themeColor[0]\n };\n });\n } else if (isFunction(value)) {\n computeStyle[key] = value(data, this._attributeContext, markData);\n } else {\n computeStyle[key] = value;\n }\n });\n\n computeStyle.gradient = gradient;\n\n return computeStyle;\n };\n }\n\n private _computeBorderAttr(borderStyle: any) {\n const { scale, field, ...mergedStyle } = borderStyle;\n\n return (data: Datum) => {\n const computeStyle: any = {};\n\n Object.keys(mergedStyle).forEach(key => {\n const value = mergedStyle[key];\n if (isFunction(value)) {\n computeStyle[key] = value(data, this._attributeContext, this.getDataView());\n } else {\n computeStyle[key] = value;\n }\n });\n if (!('stroke' in computeStyle)) {\n const themeColor = computeActualDataScheme(\n getDataScheme(\n this.model.getColorScheme(),\n this.model.modelType === 'series' ? this.model.getSpec?.() : undefined\n ),\n (this.model as unknown as ISeries).getDefaultColorDomain()\n );\n let colorScale = scale;\n let colorField = field;\n if ((!scale || !field) && this.model.modelType === 'series') {\n // 目前只有series有这个属性\n const { scale: globalColorScale, field: globalField } = (this.model as BaseSeries<any>).getColorAttribute();\n if (!scale) {\n // 获取全局的 colorScale\n colorScale = globalColorScale;\n }\n if (!colorField) {\n colorField = globalField;\n }\n computeStyle.stroke = colorScale?.scale(data[colorField]) || themeColor[0];\n }\n } else if (GradientType.includes(mergedStyle.stroke?.gradient)) {\n computeStyle.stroke = this._computeGradientAttr(mergedStyle.stroke)(data);\n }\n return computeStyle;\n };\n }\n\n protected _dataByGroup: GroupedData<Datum>;\n /**\n * 最新的数据map\n */\n protected _dataByKey: GroupedData<Datum>;\n /**\n * 上一次的数据map\n */\n protected _prevDataByKey: GroupedData<Datum>;\n protected _graphicMap: Map<string, IMarkGraphic> = new Map();\n protected _graphics: IMarkGraphic[] = [];\n /**\n * only need to clear elements after join and render\n * but `handleRenderEnd` will be call after every render\n */\n needClear?: boolean;\n\n protected _keyGetter: (datum: Datum) => string;\n protected _groupKeyGetter: (datum: Datum) => string;\n protected renderContext?: {\n parameters?: any;\n progressive?: ProgressiveContext;\n beforeTransformProgressive?: IProgressiveTransformResult;\n };\n protected _attrsByGroup?: Record<string, T>;\n\n protected _getDataByKey(data: Datum[]) {\n return groupData(data, (datum: Datum, index: number) => {\n return `${this._groupKeyGetter(datum)}_${this._keyGetter(datum) ?? index}`;\n });\n }\n\n protected _getCommonContext() {\n return {\n compiler: this.getCompiler(),\n markType: this.type as MarkTypeEnum,\n markId: this.id,\n modelId: this.model.id,\n markUserId: this._userId,\n modelUserId: this.model.userId\n };\n }\n\n prepareMorph(mark: IMark) {\n this._lastMark = mark;\n }\n\n reuse(mark: IMark) {\n if (this.type !== mark.type) {\n return;\n }\n this._product = mark.getProduct();\n this._graphics = mark.getGraphics();\n this._graphicMap = (mark as any)._graphicMap;\n\n this._graphicMap.forEach(g => {\n g.context = { ...g.context, ...this._getCommonContext() };\n });\n this._dataByKey = (mark as any)._dataByKey;\n this._prevDataByKey = (mark as any)._prevDataByKey;\n this.needClear = (mark as any).needClear;\n }\n\n private _parseProgressiveContext(data: Datum[]) {\n const enableProgressive =\n this._markConfig.progressiveStep > 0 &&\n this._markConfig.progressiveThreshold > 0 &&\n this._markConfig.progressiveStep < this._markConfig.progressiveThreshold;\n const large =\n this._markConfig.large && this._markConfig.largeThreshold > 0 && data.length >= this._markConfig.largeThreshold;\n\n if (enableProgressive) {\n const groupedData = this._dataByGroup;\n\n if (\n groupedData &&\n groupedData.keys &&\n groupedData.keys.some(key => groupedData.data.get(key).length > this._markConfig.progressiveThreshold)\n ) {\n return {\n large,\n progressive: {\n data,\n step: this._markConfig.progressiveStep,\n currentIndex: 0,\n totalStep: groupedData.keys.reduce((total, key) => {\n return Math.max(Math.ceil(groupedData.data.get(key).length / this._markConfig.progressiveStep), total);\n }, 1),\n groupedData: groupedData.data as Map<string, any[]>\n }\n };\n }\n\n return { large };\n }\n\n return {\n large\n };\n }\n\n getGraphics() {\n return this._graphics;\n }\n\n protected _createGraphic(attrs: any = {}): IGraphic {\n return Factory.createGraphicComponent(this.type, attrs);\n }\n\n protected _runGroupData(data: Datum[]) {\n this._keyGetter = isFunction(this.key)\n ? (this.key as (datum: Datum) => string)\n : isValid(this.key)\n ? (datum: Datum) => datum?.[this.key as string]\n : (datum: Datum) => datum?.[DEFAULT_DATA_KEY];\n this._groupKeyGetter = isValid(this._groupKey)\n ? (datum: Datum) => {\n return `${datum?.[this._groupKey]}`;\n }\n : () => 'key';\n\n this._dataByGroup = groupData(data, this._groupKeyGetter);\n }\n\n protected createAnimationStateList(type: string, animationConfig: Partial<MarkAnimationSpec>) {\n let config = (animationConfig as any)[type];\n if (config && Array.isArray(config)) {\n config = config.length === 1 ? config[0] : config;\n }\n // TODO 因为数据的覆盖特点,无动画的时候新的更新一定会覆盖前一次的旧值,所以默认都是后面的动画覆盖前面的动画\n // TODO 但是如果用户定义了一个动画数组,他的预期是动画不会覆盖,通过priority为INfinity来控制不覆盖\n if (Array.isArray(config)) {\n return config.map((item: any, index: number) => ({\n ...item,\n priority: item.priority ?? Infinity\n }));\n }\n return config\n ? {\n ...config,\n // 循环动画的优先级定为最高,不会被屏蔽掉\n priority: type === 'normal' ? config.priority ?? Infinity : config.priority\n }\n : config;\n }\n\n /**\n * 尝试执行morphing动画\n * @param graphics\n * @returns\n */\n protected tryRunMorphing(graphics: IMarkGraphic[]) {\n if (this._lastMark) {\n // 得设置入场图元的属性\n graphics.forEach(g => {\n if (g.context.animationState === 'appear' || g.context.animationState === 'enter') {\n g.setAttributes((g.getAttributes as any)(true));\n }\n });\n const res = runMorph([this._lastMark], [this as any], {});\n this._lastMark = null;\n return res;\n }\n return false;\n }\n\n protected _runStateAnimation(graphics: IMarkGraphic[]) {\n if (!this._animationConfig || graphics.length === 0) {\n return;\n }\n\n if (this.tryRunMorphing(graphics)) {\n return;\n }\n const animationConfig = this.getAnimationConfig();\n const useSequentialAnimation = this._markConfig.useSequentialAnimation ?? false;\n if (useSequentialAnimation && (this as any)._runSequentialAnimations) {\n (this as any)._runSequentialAnimations(graphics);\n return;\n }\n // 过滤出appear动画出来,appear动画是整体动画,可以放在全局,同时appear动画和normal动画是串行关系\n const isAppear = graphics.every(g => g.context.animationState === 'appear');\n // const appearConfig = (animationConfig as any).appear?.[0]; // TODO: animation: appear 数组\n const appearConfig = this.createAnimationStateList('appear', animationConfig);\n if (isAppear && this._product) {\n // TODO 一般appear都在最开始执行,所以这里不需要停掉normal动画\n // (this._product as IGroup).stopAnimationState('normal');\n const stateArray = appearConfig ? ['appear'] : [];\n const configArray = appearConfig\n ? [\n {\n name: 'appear',\n animation: appearConfig\n }\n ]\n : [];\n\n if ((animationConfig as any).normal) {\n stateArray.push('normal');\n const normal = this.createAnimationStateList('normal', animationConfig);\n const normalConfig = {\n name: 'normal',\n animation: normal\n };\n\n configArray.push(normalConfig);\n }\n this._product.applyAnimationState(stateArray, configArray);\n }\n\n // 判断是否需要走normal动画,enter动画执行完成后,需要跟一个normal动画\n let shouldRunNormal = false;\n // 处理除了appear以外的动画\n graphics.forEach(g => {\n const state = g.context.animationState;\n if (state === 'appear') {\n return;\n }\n const config = (animationConfig as any)[state] as any;\n if (config && config.length > 0) {\n const configList = config.map((item: any, index: number) => ({\n name: `${state}_${index}`,\n animation: item\n }));\n\n configList.forEach((item: any) => {\n item.animation.customParameters = g.context;\n });\n\n // configList.forEach((item: any) => {\n // item.animation.customParameters = g.context;\n // });\n const stateArray = [state];\n\n if (state === 'enter' && animationConfig.normal) {\n shouldRunNormal = true;\n }\n g.applyAnimationState(stateArray, [configList.length === 1 ? configList[0] : configList]);\n // configList.forEach((item: any) => {\n // item.animation.customParameters = null;\n // });\n }\n });\n\n if (shouldRunNormal && this._product && (animationConfig as any).normal?.length) {\n // 停止normal动画,并回复最初的属性\n (this._product as IGroup).stopAnimationState('normal', 'start');\n const normal = this.createAnimationStateList('normal', animationConfig);\n const normalConfig = {\n name: 'normal',\n animation: normal\n };\n (this._product as IGroup).applyAnimationState(['normal'], [normalConfig]);\n }\n }\n\n protected _setAnimationState(g: IMarkGraphic) {\n const callback =\n (this.type === MarkTypeEnum.component\n ? this.model.getAnimationStateCallback()\n : (this.model as ISeries).getRegion?.()?.getAnimationStateCallback()) ||\n ((g: IMarkGraphic) => {\n const diffState = g.context?.diffState;\n return diffState === AnimationStateEnum.exit\n ? AnimationStateEnum.exit\n : diffState === AnimationStateEnum.update\n ? AnimationStateEnum.update\n : AnimationStateEnum.appear;\n });\n const customizedState = callback(g);\n\n g.context.animationState = customizedState ?? g.context.diffState;\n\n // 复用exit的图元,需要设置属性为最初的属性\n if (g.context.animationState === DiffState.exit) {\n // 表示正在被复用,后续需要重设属性的\n g.context.reusing = true;\n // 停止所有动画,\n // TODO:属性可能回不去了(如果enter和exit不是一个动画),所以在encode阶段要获取finalAttribute,设置上去\n (g as any).animates && (g as any).animates.forEach((a: any) => a.stop());\n // force element to stop exit animation if it is reentered\n // todo animaiton\n // const animators = this.animate?.getElementAnimators(element, DiffState.exit);\n // animators && animators.forEach(animator => animator.stop('start'));\n }\n }\n\n protected _runJoin(data: Datum[]) {\n const newGroupedData = this._getDataByKey(data);\n const prevGroupedData = this._prevDataByKey;\n const allGraphics: IMarkGraphic[] = [];\n\n const enterGraphics = new Set<IMarkGraphic>(this._graphics.filter(g => g.context.diffState === DiffState.enter));\n\n const callback = (key: string, newData: Datum[], prevData: Datum[]) => {\n let g: IMarkGraphic;\n let diffState: DiffStateValues;\n\n if (isNil(newData)) {\n g = this._graphicMap.get(key);\n\n if (g) {\n diffState = DiffState.exit;\n }\n } else if (isNil(prevData)) {\n // enter\n if (this._graphicMap.has(key)) {\n g = this._graphicMap.get(key);\n } else {\n g = {} as IMarkGraphic; //\n }\n diffState = DiffState.enter;\n g.isExiting = false;\n\n this._graphicMap.set(key, g as IMarkGraphic);\n allGraphics.push(g as IMarkGraphic);\n } else {\n // update\n g = this._graphicMap.get(key);\n\n if (g) {\n diffState = DiffState.update;\n allGraphics.push(g);\n }\n }\n\n if (g) {\n enterGraphics.delete(g);\n g.context = {\n ...this._getCommonContext(),\n diffState,\n // 从旧context中继承\n reusing: g.context?.reusing,\n // 从旧context中继承\n originalFieldX: g.context?.originalFieldX,\n // 从旧context中继承\n originalFieldY: g.context?.originalFieldY,\n // 从旧context中继承\n fieldX: g.context?.fieldX,\n // 从旧context中继承\n fieldY: g.context?.fieldY,\n // TODO 如果newData为空,则使用旧的data,避免exit图元找不到data\n data: newData ?? g.context?.data,\n uniqueKey: key,\n key: newData ? this._keyGetter(newData[0]) : g.context?.key,\n groupKey: newData ? this._groupKeyGetter(newData[0]) : g.context?.groupKey,\n // TODO 用于判定这个图元是第几个,在OneByOne动画中控制顺序\n indexKey: '__VCHART_DEFAULT_DATA_INDEX',\n stateAnimateConfig: this.getAnimationConfig()?.state\n };\n this._setAnimationState(g);\n }\n return g;\n };\n\n if (prevGroupedData && newGroupedData) {\n const prevMap = new Map(prevGroupedData.data);\n const newKeys = newGroupedData.keys;\n\n newKeys.forEach(key => {\n callback(key, newGroupedData.data.get(key), prevMap.get(key));\n prevMap.delete(key);\n });\n\n prevGroupedData.keys.forEach(key => {\n if (prevMap.has(key)) {\n callback(key, null, prevMap.get(key));\n }\n });\n } else if (newGroupedData) {\n newGroupedData.keys.forEach(key => {\n // appear\n const g = callback(key, newGroupedData.data.get(key), null);\n if (g) {\n g.context.animationState = AnimationStateEnum.appear;\n // this._setAnimationState(g);\n }\n });\n } else if (prevGroupedData) {\n prevGroupedData.keys.forEach(key => {\n // disappear\n const g = callback(key, null, prevGroupedData.data.get(key));\n g.context.animationState = AnimationStateEnum.disappear;\n // this._setAnimationState(g);\n });\n }\n\n // Enter elements between dataflow start data and end data should be removed directly.\n enterGraphics.forEach(g => {\n this._graphicMap.delete(g.context.uniqueKey);\n\n if ((g as IMarkGraphic).parent) {\n (g as IMarkGraphic).parent.removeChild(g as IMarkGraphic);\n }\n\n (g as IMarkGraphic).release();\n });\n const graphicCount = allGraphics.length;\n allGraphics.forEach((g, index) => {\n g.context.graphicCount = graphicCount;\n g.context.graphicIndex = index;\n });\n this._dataByKey = newGroupedData;\n this._graphics = allGraphics;\n this.needClear = true;\n }\n\n _runEncoderOfGraphic(styles: Record<string, (datum: Datum) => any>, g: IMarkGraphic, attrs: any = {}) {\n return runEncoder(styles, g.context.data[0], attrs);\n }\n\n _runGroupEncoder(groupStyles: Record<string, (datum: Datum) => any>) {\n if (!this._dataByGroup) {\n return null;\n }\n\n const attrsByGroup: any = {};\n\n this._dataByGroup.keys.forEach(key => {\n attrsByGroup[key] = runEncoder(groupStyles, this._dataByGroup.data.get(key)[0]);\n });\n this._attrsByGroup = attrsByGroup;\n\n return attrsByGroup;\n }\n\n protected _transformGraphicAttributes(g: IMarkGraphic, attrs: any, groupAttrs?: any) {\n return {\n ...groupAttrs,\n ...attrs\n };\n }\n\n protected _separateNormalStyle(normalStyle: Partial<IAttrs<T>>) {\n const updateStyles = {};\n const groupStyles = {};\n\n Object.keys(normalStyle).forEach(key => {\n if (this._unCompileChannel[key]) {\n return;\n }\n\n if (this._option.noSeparateStyle || isStateAttrChangeable(key, normalStyle, this._groupKey)) {\n (updateStyles as any)[key] = normalStyle[key];\n } else {\n (groupStyles as any)[key] = normalStyle[key];\n }\n });\n\n return { updateStyles, groupStyles };\n }\n\n protected _getEncoderOfStyle = (stateName: string, style: Partial<IAttrs<T>>) => {\n if (style && stateName) {\n const validEncoder: Record<string, (datum: Datum) => any> = {};\n Object.keys(style).forEach(key => {\n if (this._unCompileChannel[key]) {\n return;\n }\n\n validEncoder[key] = this._computeAttribute(key, stateName);\n });\n\n return validEncoder;\n }\n\n return null;\n };\n\n protected _setGraphicFromMarkConfig = (g: IMarkGraphic) => {\n const { setCustomizedShape, graphicName } = this._markConfig;\n\n if (setCustomizedShape) {\n g.pathProxy = (attrs: Partial<IGraphicAttribute>) => {\n return setCustomizedShape(g.context.data, attrs, new CustomPath2D());\n };\n }\n\n if (graphicName) {\n if (isFunction(graphicName)) {\n g.name = (graphicName as (e: IMarkGraphic) => string)(g);\n } else {\n g.name = graphicName as string;\n }\n }\n };\n\n protected _setStateOfGraphic = (g: IMarkGraphic) => {\n g.clearStates();\n g.stateProxy = null;\n\n if (g.context.diffState === DiffState.enter || g.context.diffState === DiffState.update) {\n g.stateProxy = (stateName: string, nexStates: string[]) => {\n return this._runEncoderOfGraphic(this._encoderOfState?.[stateName], g);\n };\n\n g.context.states && g.useStates(g.context.states);\n }\n };\n\n protected _addProgressiveGraphic(parent: IGroup, g: IMarkGraphic) {\n (parent as IGroup).incrementalAppendChild(g);\n }\n\n protected _runEncoder(graphics: IMarkGraphic[], noGroupEncode?: boolean) {\n const attrsByGroup = noGroupEncode ? null : this._runGroupEncoder(this._encoderOfState?.group);\n\n graphics.forEach((g, index) => {\n const attrs = this._runEncoderOfGraphic(this._encoderOfState?.update, g);\n\n // 配置的优先级高于encoder\n if (!isNil(this._markConfig.interactive)) {\n attrs.pickable = this._markConfig.interactive;\n }\n const finalAttrs = this._transformGraphicAttributes(g, attrs, attrsByGroup?.[g.context.groupKey]);\n\n g.context.finalAttrs = finalAttrs;\n });\n }\n\n protected _runApplyGraphic(graphics: IMarkGraphic[]) {\n const hasAnimation = this.hasAnimation();\n\n graphics.forEach((g, index) => {\n const finalAttrs = g.context.finalAttrs;\n\n const hasStateAnimation = this.hasAnimationByState(g.context.animationState);\n // 新创建的graphic\n if (!(g as any).setAttributes) {\n const mockGraphic = g;\n // TODO:如果要走入场、Enter动画,就不用设置值了,保存到diffAttrs中由入场动画自己去设置,因为入场动画可能会延迟执行,所以首帧不能直接设置属性\n // TODO 太麻烦了,会影响后续bounds等计算逻辑,还是首帧设置吧。。。\n g = this._createGraphic(finalAttrs) as IMarkGraphic;\n // g = this._createGraphic(finalAttrs) as IMarkGraphic;\n // 如果有动画,设置一下最终attribute\n if (hasAnimation) {\n g.setFinalAttributes(finalAttrs);\n }\n g.context = mockGraphic.context;\n g.context.diffAttrs = finalAttrs;\n\n const gIndex = this._graphics === graphics ? index : index + this._graphics.length - graphics.length;\n if (gIndex >= 0) {\n this._graphics[gIndex] = g;\n }\n\n if (this.renderContext?.progressive) {\n const groupIndex = this._dataByGroup ? this._dataByGroup.keys.indexOf(g.context.groupKey) : 0;\n const group = groupIndex >= 0 ? this._product.getChildAt(groupIndex) : null;\n if (group) {\n this._addProgressiveGraphic(group as IGroup, g);\n }\n } else {\n this._product.appendChild(g);\n this._graphicMap.set(g.context.uniqueKey, g);\n }\n } else {\n const diffAttrs = getDiffAttributesOfGraphic(g, finalAttrs);\n g.context.diffAttrs = diffAttrs;\n if (g.context.reusing) {\n // 表示正在被复用,需要重设属性的\n // TODO 理论上复用后只会走一次enter,所以这里lastAttrs不需要后续清除,这里需要硬拷贝(通过initAttributes重设属性也行)\n g.context.lastAttrs = g.attribute;\n g.initAttributes({});\n // 为了避免exit一些和enter不一样的属性,所以这里要重置属性\n // const finalAttrs = g.getFinalAttribute();\n // finalAttrs && g.initAttributes({ ...finalAttrs });\n // g.initAttributes(finalAttrs);\n g.context.reusing = false;\n } else if (!hasStateAnimation) {\n // 不是正在被复用的属性,也不需要走动画,那就设置属性\n hasAnimation ? g.setAttributesAndPreventAnimate(diffAttrs) : g.setAttributes(diffAttrs);\n }\n\n // 如果有动画,需要设置值\n if (hasAnimation) {\n g.setFinalAttributes(finalAttrs);\n }\n }\n\n this._setStateOfGraphic(g);\n this._setGraphicFromMarkConfig(g);\n });\n }\n\n protected _updateEncoderByState() {\n const encoderOfState: Record<string, Record<string, (datum: Datum) => any>> = {};\n\n Object.keys(this.stateStyle).forEach(stateName => {\n if (stateName === STATE_VALUE_ENUM.STATE_NORMAL) {\n const { groupStyles, updateStyles } = this._separateNormalStyle(this.stateStyle[stateName]);\n\n encoderOfState.group = this._getEncoderOfStyle(stateName, groupStyles);\n encoderOfState.update = this._getEncoderOfStyle(stateName, updateStyles);\n } else {\n encoderOfState[stateName] = this._getEncoderOfStyle(stateName, this.stateStyle[stateName]);\n }\n });\n\n this._encoderOfState = encoderOfState;\n }\n\n protected _runState(graphics: IMarkGraphic[]) {\n graphics.forEach(g => {\n const prevInteractionStateValues = (g.currentStates ?? []).filter((sv: string) => {\n return !this.state.getStateInfo(sv);\n });\n const newStateValues = [...prevInteractionStateValues, ...this.state.checkState(g, g.context.data)];\n\n if (this._stateSort && newStateValues.length) {\n newStateValues.sort(this._stateSort);\n }\n // const prevStateValues = g.context.states;\n // const isStateChanged =\n // newStateValues.length !== prevStateValues.length ||\n // newStateValues.some((newState: string, index: number) => newState !== prevStateValues[index]);\n\n g.context.states = newStateValues;\n });\n }\n\n protected _getAttrsFromConfig(attrs: IGroupGraphicAttribute = {}): IGroupGraphicAttribute {\n const { zIndex, clip, clipPath, overflow } = this._markConfig;\n\n if (!isNil(zIndex)) {\n attrs.zIndex = zIndex;\n }\n\n if (!isNil(clip)) {\n attrs.clip = clip;\n }\n\n if (!isNil(clipPath)) {\n const paths = isArray(clipPath) ? clipPath : clipPath(this._graphics);\n\n if (paths && paths.length) {\n attrs.path = paths;\n } else {\n attrs.clip = false;\n attrs.path = paths;\n }\n }\n\n if (!isNil(overflow)) {\n attrs.overflow = overflow;\n }\n\n return attrs;\n }\n\n protected _updateAttrsOfGroup() {\n const attrs = this._getAttrsFromConfig();\n\n this._product?.setAttributes(attrs);\n\n if (this._markConfig.support3d && this._product) {\n this._product.setMode('3d');\n }\n }\n\n protected _runBeforeTransform(data: Datum[]) {\n const transforms = this._transform?.filter(transformSpec => {\n if (transformSpec.type) {\n const transform = Factory.getGrammarTransform(transformSpec.type);\n return transform && (!transform.runType || transform.runType === 'beforeJoin');\n }\n\n return false;\n });\n\n return this.runTransforms(transforms, data);\n }\n\n protected _runEncoderTransform(data: Datum[], isProgressive: boolean) {\n const transforms = this._transform?.filter(transformSpec => {\n if (transformSpec.type) {\n const transform = Factory.getGrammarTransform(transformSpec.type);\n return transform && transform.runType === 'afterEncode' && !!transform.canProgressive === isProgressive;\n }\n\n return false;\n });\n\n return this.runTransforms(transforms, data);\n }\n\n renderInner() {\n this._updateEncoderByState();\n\n const data = this._data?.getProduct() ?? [{}];\n\n const transformData = this._runBeforeTransform(data);\n let markData: Datum[];\n\n if ((transformData as any)?.progressive) {\n this.renderContext = {\n beforeTransformProgressive: (transformData as any).progressive as IProgressiveTransformResult\n };\n const p = (transformData as any).progressive;\n if (p.canAnimate && p.canAnimate() && p.unfinished()) {\n this._updateAttrsOfGroup();\n return;\n }\n markData = p.output();\n } else {\n markData = array(transformData);\n this._runGroupData(markData);\n this.renderContext = this._parseProgressiveContext(markData);\n }\n\n if (this.renderContext?.progressive) {\n this._graphicMap.clear();\n this._runProgressiveStep();\n } else {\n this._runJoin(markData);\n this._runState(this._graphics);\n this._runEncoder(this._graphics);\n this._runEncoderTransform(this._graphics, false);\n this._runApplyGraphic(this._graphics);\n }\n\n this._updateAttrsOfGroup();\n }\n\n render() {\n if (this.isCommited()) {\n if (\n this.getVisible() &&\n (!this._skipBeforeLayouted || this.getCompiler().getLayoutState() !== LayoutState.before)\n ) {\n log(`render mark: ${this.getProductId()}, type is ${this.type}`);\n this.renderInner();\n }\n\n this.uncommit();\n }\n }\n\n updateMarkState(key: string): void {\n if (!this._product) {\n return;\n }\n const stateInfo = this.state.getStateInfo(key);\n\n this._graphics.forEach(g => {\n if (this.state.checkOneState(g, g.context.data, stateInfo) === 'in') {\n g.addState(key, true, this.hasAnimationByState('state'));\n } else {\n g.removeState(key, this.hasAnimationByState('state'));\n }\n });\n }\n\n clearExitGraphics() {\n this._prevDataByKey = this._dataByKey;\n\n const doRemove = (g: IMarkGraphic, key: string) => {\n this._graphicMap.delete(key);\n if (g.parent) {\n g.parent.removeChild(g);\n }\n if (g.release) {\n g.release();\n }\n };\n this._graphicMap.forEach((g, key) => {\n if (g.context.diffState !== DiffState.exit || g.isExiting) {\n return;\n }\n // 避免重复执行退场动画\n if (g.context.animationState === DiffState.exit && this.hasAnimationByState('exit')) {\n g.isExiting = true;\n // 执行exit动画\n const animationConfig = this.getAnimationConfig();\n if ((animationConfig as any).exit && (animationConfig as any).exit.length) {\n const exitConfigList = (animationConfig as any).exit.map((item: any, index: number) => ({\n name: `exit_${index}`,\n animation: {\n ...item,\n customParameters: g.context\n }\n }));\n g.applyAnimationState(['exit'], [exitConfigList.length === 1 ? exitConfigList[0] : exitConfigList], () => {\n // 有可能又被复用了,所以这里需要判断,如果还是在exiting阶段的话才删除\n // TODO 这里如果频繁执行的话,可能会误判\n doRemove(g, key);\n });\n }\n } else {\n doRemove(g, key);\n }\n });\n }\n\n isProgressive() {\n return this.renderContext && (!!this.renderContext.progressive || !!this.renderContext.beforeTransformProgressive);\n }\n\n canAnimateAfterProgressive() {\n return (\n this.renderContext &&\n this.renderContext.beforeTransformProgressive &&\n this.renderContext.beforeTransformProgressive.canAnimate?.()\n );\n }\n\n isDoingProgressive() {\n return (\n this.renderContext &&\n ((this.renderContext.progressive &&\n this.renderContext.progressive.currentIndex < this.renderContext.progressive.totalStep) ||\n (this.renderContext.beforeTransformProgressive && this.renderContext.beforeTransformProgressive.unfinished()))\n );\n }\n\n clearProgressive() {\n if (this.renderContext && this.renderContext.progressive) {\n this._graphics = [];\n\n (this._product as any).children.forEach((group: IGroup) => {\n group.incrementalClearChild();\n });\n (this._product as any).removeAllChild();\n }\n\n if (this.renderContext && this.renderContext.beforeTransformProgressive) {\n this.renderContext.beforeTransformProgressive.release();\n }\n\n this.renderContext = null;\n }\n\n restartProgressive() {\n if (this.renderContext && this.renderContext.progressive) {\n this.renderContext.progressive.currentIndex = 0;\n }\n }\n private _runBeforeProgressive() {\n const transform = this.renderContext.beforeTransformProgressive;\n\n transform.progressiveRun();\n const output = transform.output();\n\n if (transform.canAnimate?.()) {\n if (transform.unfinished()) {\n return;\n }\n\n this._runGroupData(output);\n this._runJoin(output);\n this._runState(this._graphics);\n this._runEncoder(this._graphics);\n this._runApplyGraphic(this._graphics);\n }\n }\n\n protected _runProgressiveJoin(): {\n graphicsByGroup?: Record<string, IMarkGraphic[]>;\n graphics?: IMarkGraphic[];\n needUpdate?: boolean;\n } {\n const currentIndex = this.renderContext.progressive.currentIndex;\n\n const graphics: IMarkGraphic[] = [];\n const graphicsByGroup: Record<string, IMarkGraphic[]> = {};\n this._dataByGroup.keys.forEach(groupKey => {\n const data = this.renderContext.progressive.groupedData.get(groupKey as string);\n const groupStep = this.renderContext.progressive.step;\n const dataSlice = data.slice(currentIndex * groupStep, (currentIndex + 1) * groupStep);\n const group: IMarkGraphic[] = [];\n\n dataSlice.forEach((entry, i) => {\n const key = this._keyGetter(entry);\n const g = {\n context: {\n ...this._getCommonContext(),\n diffState: DiffState.enter,\n data: [entry],\n uniqueKey: `${groupKey}_${key ?? currentIndex * groupStep + i}`,\n key,\n groupKey: groupKey\n }\n };\n\n group.push(g as IMarkGraphic);\n graphics.push(g as IMarkGraphic);\n });\n\n graphicsByGroup[groupKey as string] = group;\n });\n\n return { graphicsByGroup, graphics, needUpdate: true };\n }\n\n protected _createIncrementalGraphics() {\n this._product.removeAllChild();\n\n this._dataByGroup.keys.forEach(key => {\n const graphicItem = createGroup({\n pickable: false,\n zIndex: this._markConfig.zIndex\n });\n graphicItem.incremental = this.renderContext.progressive.step;\n this._product.appendChild(graphicItem);\n });\n }\n\n protected _setCommonAttributesToTheme(g: IMarkGraphic) {\n if (this._attrsByGroup && g) {\n const parent = g.parent;\n\n if (parent && this._attrsByGroup?.[g.context?.groupKey]) {\n parent.setTheme({\n common: this._attrsByGroup[g.context?.groupKey] as any\n });\n }\n }\n }\n\n protected _runProgressiveEncoder(graphics: IMarkGraphic[]) {\n const progressiveIndex = this.renderContext.progressive.currentIndex;\n\n if (progressiveIndex === 0) {\n this._runEncoder(graphics);\n } else {\n this._runEncoder(graphics, true);\n }\n }\n\n protected _runProgressiveApplyGraphic(graphics: IMarkGraphic[]) {\n const progressiveIndex = this.renderContext.progressive.currentIndex;\n\n if (progressiveIndex === 0) {\n this._runApplyGraphic(graphics);\n this._setCommonAttributesToTheme(graphics[0]);\n } else {\n this._runApplyGraphic(graphics);\n }\n }\n\n protected _runProgressiveStep() {\n const { graphics, graphicsByGroup, needUpdate } = this._runProgressiveJoin();\n\n if (this.renderContext.progressive.currentIndex === 0) {\n this._createIncrementalGraphics();\n this._graphics = graphics;\n } else if (needUpdate) {\n graphics.forEach(g => {\n this._graphics.push(g);\n });\n }\n this._runState(graphics);\n\n Object.keys(graphicsByGroup).forEach(groupKey => {\n this._runProgressiveEncoder(graphicsByGroup[groupKey]);\n });\n this._runEncoderTransform(this._graphics, true);\n\n Object.keys(graphicsByGroup).forEach(groupKey => {\n this._runProgressiveApplyGraphic(graphicsByGroup[groupKey]);\n });\n\n this.renderContext.progressive.currentIndex += 1;\n }\n\n renderProgressive() {\n if (this.renderContext?.beforeTransformProgressive) {\n this._runBeforeProgressive();\n return;\n } else if (this.renderContext.progressive) {\n this._runProgressiveStep();\n }\n }\n\n hasAnimationByState(state: AnimationStateValues) {\n if (\n !state ||\n !this._animationConfig ||\n !(this._animationConfig as any)[state] ||\n this._disabledAnimationStates.includes(state)\n ) {\n return false;\n }\n const stateAnimationConfig = (this._animationConfig as any)[state];\n return (stateAnimationConfig as IAnimationConfig[]).length > 0 || isObject(stateAnimationConfig);\n }\n\n hasAnimation() {\n if (!this._animationConfig) {\n return false;\n }\n return Object.keys(this._animationConfig).length > 0;\n }\n\n runAnimation() {\n this._runStateAnimation(this.getGraphics());\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/mark/base/base-mark.ts"],"names":[],"mappings":"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","file":"base-mark.js","sourcesContent":["import { DiffState } from '../interface/enum';\nimport { type IStateInfo, type IModelMarkAttributeContext, STATE_VALUE_ENUM } from '../../compile/mark/interface';\nimport type { BaseSeries } from '../../series/base/base-series';\nimport type {\n Datum,\n IMarkSpec,\n ConvertToMarkStyleSpec,\n GradientStop,\n IVisual,\n IVisualScale,\n IVisualSpecStyle,\n ICommonSpec,\n FunctionType,\n ValueType,\n StringOrNumber,\n Maybe\n} from '../../typings';\nimport type { DataView } from '@visactor/vdataset';\nimport { mergeSpec } from '@visactor/vutils-extension';\nimport { Color } from '../../util/color';\nimport { createScaleWithSpec } from '../../util/scale';\nimport { MarkTypeEnum } from '../interface';\nimport type {\n IMarkRaw,\n IMarkStateStyle,\n IMarkStyle,\n IMark,\n IMarkOption,\n StyleConvert,\n VisualScaleType,\n MarkInputStyle,\n GroupedData,\n IAttrs,\n IMarkGraphic,\n DiffStateValues,\n ProgressiveContext,\n IProgressiveTransformResult,\n MarkType,\n AnimationStateValues\n} from '../interface';\nimport { GradientType, DEFAULT_GRADIENT_CONFIG } from '../../constant/gradient';\nimport { AttributeLevel } from '../../constant/attribute';\nimport { isValidScaleType } from '@visactor/vscale';\nimport { computeActualDataScheme, getDataScheme } from '../../theme/color-scheme/util';\nimport type { ISeries } from '../../series/interface';\nimport { MarkStateManager } from '../../compile/mark';\nimport type {\n ICompilableMark,\n IMarkCompileOption,\n IMarkConfig,\n IMarkStateManager,\n StateValueType\n} from '../../compile/mark/interface';\nimport { array, degreeToRadian, isArray, isBoolean, isFunction, isNil, isObject, isValid } from '@visactor/vutils';\nimport { curveTypeTransform, groupData, runEncoder } from '../utils/common';\nimport type { ICompilableInitOption } from '../../compile/interface';\nimport { LayoutState } from '../../compile/interface';\nimport type { IGroupGraphicAttribute, IGraphicAttribute, IGroup, IGraphic } from '@visactor/vrender-core';\nimport { createGroup, CustomPath2D } from '@visactor/vrender-core';\nimport { isStateAttrChangeable } from '../../compile/mark/util';\nimport { Factory } from '../../core/factory';\nimport { DEFAULT_DATA_KEY } from '../../constant/data';\nimport { GrammarItem } from '../../compile/grammar-item';\nimport { LayoutZIndex } from '../../constant/layout';\nimport type { IModel } from '../../model/interface';\nimport type { ICompilableData } from '../../compile/data/interface';\nimport type { IAnimationConfig } from '../../animation/interface';\nimport { AnimationStateEnum, type MarkAnimationSpec } from '../../animation/interface';\nimport { CompilableData } from '../../compile/data/compilable-data';\nimport { getDiffAttributesOfGraphic } from '../../util/mark';\nimport { log } from '../../util/debug';\nimport { morph as runMorph } from '../../compile/morph';\n\nexport type ExChannelCall = (\n key: string | number | symbol,\n datum: Datum,\n states: StateValueType,\n baseValue: unknown\n) => unknown;\n\nexport class BaseMark<T extends ICommonSpec> extends GrammarItem implements IMarkRaw<T> {\n /** 类型 */\n readonly type: MarkType = undefined as unknown as MarkType;\n\n /** name */\n readonly name: string = 'mark';\n\n /** key field */\n readonly key: ICompilableMark['key'];\n\n protected _markConfig: IMarkConfig = {\n zIndex: LayoutZIndex.Mark,\n /** morph动画关联关系配置 */\n morph: false\n };\n\n protected _isCommited?: boolean;\n\n commit(render?: boolean, recursion?: boolean) {\n if (recursion && this.getMarks().length > 0) {\n this.getMarks().forEach(m => m.commit(false, recursion));\n }\n\n this._isCommited = true;\n if (render) {\n this.getCompiler().renderNextTick();\n }\n }\n\n uncommit() {\n this._isCommited = false;\n }\n\n isCommited() {\n return this._isCommited;\n }\n\n getMarkConfig(): IMarkConfig {\n return this._markConfig;\n }\n setMarkConfig(config: IMarkConfig) {\n Object.keys(config).forEach(key => {\n (this._markConfig as any)[key] = (config as any)[key];\n });\n }\n\n /** 可见性 */\n protected _visible: boolean = true;\n getVisible() {\n return this._visible;\n }\n setVisible(visible: boolean) {\n this._visible = visible;\n }\n\n /**\n * 用户设置的 id\n */\n protected _userId: StringOrNumber;\n getUserId() {\n return this._userId;\n }\n setUserId(userId: StringOrNumber) {\n if (isValid(userId)) {\n this._userId = userId;\n }\n }\n\n /** parent model */\n readonly model: IModel;\n\n /** 数据(可以没有) */\n protected _data: ICompilableData;\n getDataView(): DataView | undefined {\n return this._data?.getDataView();\n }\n setDataView(d?: DataView) {\n if (isNil(this._data)) {\n this.initMarkData(this._option);\n }\n this._data.setDataView(d);\n }\n getData() {\n return this._data;\n }\n setData(d?: ICompilableData) {\n this._data = d;\n if (d) {\n d.addRelatedMark(this);\n }\n }\n\n /** 默认的stateStyle */\n stateStyle: IMarkStateStyle<T> = {};\n\n /** 状态管理器 */\n state: IMarkStateManager;\n\n protected _unCompileChannel: { [key in string]: boolean } = {};\n\n hasState(state: string) {\n return state in this.state.getStateMap();\n }\n getState(state: string) {\n return this.state.getStateMap()[state];\n }\n\n protected _animationConfig: Partial<MarkAnimationSpec>;\n getAnimationConfig() {\n return this._animationConfig;\n }\n\n setAnimationConfig(config: Partial<MarkAnimationSpec>) {\n // group mark 动画默认只挂到自己\n const defaultPrams = this.type === 'group' ? { selfOnly: true } : {};\n const formatAnimationCfg = (cfg: IAnimationConfig) => {\n const options = (cfg as any)!.options ?? {};\n\n return {\n ...defaultPrams,\n ...cfg,\n options: (datum: any, graphic: IMarkGraphic, customParams: any) => {\n const _options = typeof options === 'function' ? options(datum, graphic, customParams) : options;\n\n if (graphic && graphic.context && graphic.context.compiler && isValid(graphic.context.modelId)) {\n const model = graphic.context.compiler.getChart()?.getModelById(graphic.context.modelId);\n\n return {\n ..._options,\n layoutRect: (model as any)?.getLayoutRect?.()\n };\n }\n\n return {\n ..._options\n };\n }\n };\n };\n\n // 封装options,批量添加一些默认参数\n const animationConfig: Partial<MarkAnimationSpec> = {};\n\n Object.keys(config).forEach(key => {\n const value = (config as any)[key];\n if (isArray(value)) {\n (animationConfig as any)[key] = value.map(formatAnimationCfg);\n } else if (isValid(value)) {\n (animationConfig as any)[key] = formatAnimationCfg(value);\n }\n });\n this._animationConfig = animationConfig;\n }\n\n protected _disabledAnimationStates?: string[] = [];\n\n disableAnimationByState(state: string | string[]) {\n const states = array(state);\n this._disabledAnimationStates = [...new Set([...this._disabledAnimationStates, ...states])];\n }\n\n enableAnimationByState(state: string | string[]) {\n const states = array(state);\n this._disabledAnimationStates = this._disabledAnimationStates.filter(s => !states.includes(s));\n }\n\n /** 布局标记 */\n private _skipBeforeLayouted = false;\n\n setSkipBeforeLayouted(skip: boolean) {\n this._skipBeforeLayouted = skip;\n }\n protected _groupKey?: string;\n setGroupKey(groupKey: string) {\n this._groupKey = groupKey;\n }\n\n protected _stateSort?: (stateA: string, stateB: string) => number;\n\n protected declare _product: Maybe<IGroup>;\n getProduct() {\n return this._product;\n }\n\n // 保存上一次的mark,用于morph的时候获取上次的图元\n protected declare _lastMark?: IMark;\n\n /** 初始化 mark data */\n protected initMarkData(option: ICompilableInitOption) {\n this._data = new CompilableData(option);\n\n this._data.addRelatedMark(this);\n }\n\n protected _compileProduct(option?: IMarkCompileOption) {\n this.commit();\n this._context = option?.context;\n const product = this.getProduct();\n // 处理 visible 为 false 的情况\n if (!this._visible) {\n if (isValid(product)) {\n this.removeProduct();\n }\n return;\n } else if (isValid(product)) {\n if (option.group && product.parent !== option.group) {\n option.group.appendChild(product);\n }\n } else {\n const compiler = this.getCompiler();\n if (!compiler.isInited) {\n return;\n }\n this._initProduct(option?.group);\n }\n\n if (isNil(this._product)) {\n return;\n }\n this.compileData();\n this.compileState();\n this.compileEncode();\n // this.compileContext(option?.context);\n // this.compileTransform();\n }\n\n /** 创建语法元素对象 */\n protected _initProduct(group?: IGroup) {\n const stage = this.getStage();\n\n if (!stage) {\n return;\n }\n\n // 声明语法元素\n const id = this.getProductId();\n\n this._product = createGroup(\n this.type !== MarkTypeEnum.group\n ? {\n pickable: false,\n zIndex: this._markConfig.zIndex,\n overflow: this._markConfig.overflow\n }\n : {}\n );\n // todo 为了和之前的版本兼容,这里暂时设置成name\n this._product.name = id;\n // 为了从graphic上能索引到mark\n this._product.mark = this;\n\n (group ?? this.getCompiler()?.getRootGroup()).appendChild(this._product);\n\n // if (this.name && this._product) {\n // this._product.name = this.name;\n // }\n this._compiledProductId = id;\n }\n\n generateProductId() {\n if (this._userId) {\n return `${this._userId}`;\n }\n return `${this.name}_${this.id}`;\n }\n\n layout(layout: () => void) {\n // todo\n }\n\n compileData() {\n if (isNil(this._data)) {\n return;\n }\n this._data.compile();\n\n // 绑定数据\n // const dataProduct = this._data.getProduct();\n // if (isValid(this._product) && isValid(dataProduct)) {\n // // this._product.join(dataProduct as IData, this.key, undefined, this.getGroupKey());\n // }\n }\n\n // protected _separateStyle() {\n // const { [STATE_VALUE_ENUM.STATE_NORMAL]: normalStyle } = this.stateStyle;\n\n // const enterStyles: Record<string, MarkFunctionType<any>> = this._option.noSeparateStyle ? null : {};\n // const updateStyles: Record<string, MarkFunctionType<any>> = {};\n // Object.keys(normalStyle).forEach(key => {\n // if (this._unCompileChannel[key]) {\n // return;\n // }\n\n // if (this._option.noSeparateStyle || isStateAttrChangeable(key, normalStyle, this.getGroupKey())) {\n // updateStyles[key] = {\n // callback: this._computeAttribute(key, 'normal'),\n // dependency: [this.stateKeyToSignalName('markUpdateRank')]\n // };\n // } else {\n // enterStyles[key] = this._computeAttribute(key, 'normal');\n // }\n // });\n // return { enterStyles, updateStyles };\n // }\n\n compileEncode() {\n // const { [STATE_VALUE_ENUM.STATE_NORMAL]: normalStyle, ...temp } = this.stateStyle;\n // const { enterStyles, updateStyles } = this._separateStyle();\n // const encoders: any = {\n // update: updateStyles,\n // group: enterStyles\n // };\n // Object.keys(temp).forEach(state => {\n // const styles: Record<string, MarkFunctionType<any>> = {};\n // Object.keys(temp[state]).forEach(key => {\n // if (this._unCompileChannel[key]) {\n // return;\n // }\n // styles[key] = {\n // callback: this._computeAttribute(key, state),\n // dependency: [this.stateKeyToSignalName('markUpdateRank')]\n // };\n // });\n // encoders[state] = styles;\n // });\n // // 在布局完成前不进行encode\n // if (this._skipBeforeLayouted) {\n // }\n }\n\n compileState() {\n // this.state.compileState(this, this._stateSort);\n }\n\n compileAnimation() {\n // if (this._animationConfig) {\n // let stateSignal: any;\n // if (this.type === 'component') {\n // // 组件有自己的动画状态\n // stateSignal = (this.model as IComponent).animate?.getAnimationStateSignalName();\n // } else {\n // const region = (this.model as ISeries).getRegion?.();\n // stateSignal = region?.animate?.getAnimationStateSignalName();\n // }\n // this._product.animation(this._animationConfig);\n // this._product.animationState({\n // callback: (datum: Datum, element: IElement, parameters: Record<string, any>) => {\n // return parameters[stateSignal]?.callback(datum, element);\n // },\n // dependency: stateSignal\n // });\n // if (this._animationConfig.normal) {\n // if (!this._animationConfig.appear) {\n // this._event.on(VGRAMMAR_HOOK_EVENT.AFTER_DO_RENDER, () => {\n // this.runAnimationByState(AnimationStateEnum.normal);\n // });\n // } else {\n // this._event.on(VGRAMMAR_HOOK_EVENT.ANIMATION_END, ({ event }) => {\n // if (event.mark === this.getProduct() && event.animationState === AnimationStateEnum.appear) {\n // this.runAnimationByState(AnimationStateEnum.normal);\n // }\n // });\n // }\n // }\n // }\n }\n\n _context: any;\n\n compileContext(extraContext?: any) {\n // const config: IMarkConfig = {\n // ...this._markConfig,\n // context: {\n // }\n // };\n\n this._context = {\n markId: this.id,\n modelId: this.model.id,\n markUserId: this._userId,\n modelUserId: this.model.userId,\n ...extraContext\n };\n }\n\n getContext() {\n return this._context;\n }\n\n protected compileTransform() {\n // if (this._transform?.length) {\n // this.getProduct().transform(this._transform);\n // }\n }\n\n updateState(newState: Record<string, unknown>, noRender?: boolean) {\n this.commit();\n\n return this.state.updateState(newState, noRender);\n }\n\n getMarks(): IMark[] {\n return [];\n }\n\n runAnimationByState(state?: string) {\n // return this.getProduct()?.animate?.runAnimationByState(state);\n }\n\n stopAnimationByState(state?: string) {\n // return this.getProduct()?.animate?.stopAnimationByState(state);\n }\n\n pauseAnimationByState(state?: string) {\n // return this.getProduct()?.animate?.pauseAnimationByState(state);\n }\n\n resumeAnimationByState(state?: string) {\n // return this.getProduct()?.animate?.resumeAnimationByState(state);\n }\n\n removeProduct() {\n if (this._product && this._product.parent) {\n this._product.parent.removeChild(this._product);\n }\n this._product = null;\n this._compiledProductId = null;\n }\n release() {\n // if (this._product && this._product.parent) {\n // this._product.parent.removeChild(this._product);\n // }\n\n this.state.release();\n super.release();\n this._lastMark = null;\n }\n\n protected _simpleStyle: T;\n\n setSimpleStyle(s: T) {\n this._simpleStyle = s;\n }\n\n getSimpleStyle(): T {\n return this._simpleStyle;\n }\n\n protected declare _option: IMarkOption;\n\n protected _attributeContext: IModelMarkAttributeContext;\n\n protected _encoderOfState: Record<string, Record<string, (datum: Datum) => any>>;\n\n /** by _unCompileChannel, some channel need add default channel to make sure update available */\n _extensionChannel: {\n [key: string | number | symbol]: string[];\n } = {};\n /** same as _extensionChannel. when compute channel, add extension channel effect */\n _computeExChannel: {\n [key: string | number | symbol]: ExChannelCall;\n } = {};\n\n constructor(name: string, option: IMarkOption) {\n super(option);\n this.name = name;\n this.model = option.model;\n this.key = option.key;\n this.state = new MarkStateManager(option, this as unknown as IMark) as unknown as IMarkStateManager;\n // 这里的上下文多数情况下与 mark 是什么是没有关系的,与mark的使用者,也就是series,component有的逻辑有关。\n this._attributeContext = option.attributeContext;\n option.map?.set(this.id, this as unknown as IMark);\n }\n\n created(): void {\n this._initStyle();\n }\n\n /**\n * 外部调用,根据 spec 初始化 style(如果由 IModel 派生类调用,请使用 IModel.initMarkStyleWithSpec)\n * @param spec\n * @param key\n * @returns\n */\n initStyleWithSpec(spec: IMarkSpec<T>) {\n if (!spec) {\n return;\n }\n\n if (isValid(spec.id)) {\n this._userId = spec.id;\n }\n\n // interactive\n if (isBoolean(spec.interactive)) {\n this._markConfig.interactive = spec.interactive;\n }\n // zIndex\n if (isValid(spec.zIndex)) {\n this._markConfig.zIndex = spec.zIndex;\n }\n // visible\n if (isBoolean(spec.visible)) {\n this.setVisible(spec.visible);\n }\n\n this._markConfig.setCustomizedShape = spec.customShape;\n\n this._stateSort = spec.stateSort;\n\n // style\n this._initSpecStyle(spec);\n }\n\n protected _transformStyleValue<T>(\n styleConverter: StyleConvert<T>,\n transform: (value: ValueType<T>) => ValueType<T>\n ): StyleConvert<any> {\n if ((styleConverter as VisualScaleType).scale) {\n const scale = (styleConverter as VisualScaleType).scale;\n const range = scale.range();\n scale.range(range.map(transform));\n return styleConverter as StyleConvert<T>;\n } else if (typeof styleConverter === 'function') {\n return ((...args) => {\n return transform((styleConverter as FunctionType<number>)(...args) as ValueType<T>);\n }) as StyleConvert<T>;\n }\n return transform(styleConverter as ValueType<T>);\n }\n\n convertAngleToRadian(styleConverter: StyleConvert<number>) {\n // 用户传入的角度配置,需要做一层转换\n return this._transformStyleValue(styleConverter, degreeToRadian);\n }\n\n isUserLevel(level: number) {\n return [\n AttributeLevel.User_Mark,\n AttributeLevel.User_Series,\n AttributeLevel.User_Chart,\n AttributeLevel.User_SeriesStyle\n ].includes(level);\n }\n\n /**\n * 由外部series调用,设置markStyle的接口(如果由 IModel 派生类调用,请使用 IModel.setMarkStyle)\n * @param style\n * @param level\n * @param state\n */\n setStyle<U extends keyof T>(\n style: Partial<IMarkStyle<T>>,\n state: StateValueType = 'normal',\n level: number = 0\n ): void {\n if (isNil(style)) {\n return;\n }\n\n if (this.stateStyle[state] === undefined) {\n this.stateStyle[state] = {};\n }\n\n const isUserLevel = this.isUserLevel(level);\n\n Object.keys(style).forEach((attr: string) => {\n let attrStyle = style[attr] as MarkInputStyle<T[U]>;\n if (isNil(attrStyle)) {\n return;\n }\n\n attrStyle = this._filterAttribute(attr as any, attrStyle, state, level, isUserLevel);\n\n this.setAttribute(attr as any, attrStyle, state, level);\n });\n }\n\n getStyle(key: string, state: StateValueType = 'normal'): any {\n return this.stateStyle[state][key]?.style;\n }\n\n /** 过滤单个 attribute */\n protected _filterAttribute<U extends keyof T>(\n attr: U,\n style: MarkInputStyle<T[U]>,\n state: StateValueType,\n level: number,\n isUserLevel: boolean\n ): StyleConvert<T[U]> {\n let newStyle = this._styleConvert(style);\n if (isUserLevel) {\n switch (attr) {\n case 'angle':\n newStyle = this.convertAngleToRadian(newStyle);\n break;\n case 'innerPadding':\n case 'outerPadding':\n // VRender 的 padding 定义基于 centent-box 盒模型,默认正方向是向外扩,与 VChart 不一致。这里将 padding 符号取反\n newStyle = this._transformStyleValue(newStyle, (value: number) => -value);\n break;\n case 'curveType':\n newStyle = this._transformStyleValue(newStyle, (value: string) =>\n curveTypeTransform(value, (this._option.model as any).direction)\n );\n break;\n }\n }\n return newStyle;\n }\n\n /**\n * TODO: 没有外部调用\n * 设置mark样式所参考的图元\n */\n setReferer<U extends keyof T>(mark: IMarkRaw<T>, styleKey?: U, state?: StateValueType) {\n if (!mark) {\n return;\n }\n if (styleKey && state) {\n const style = this.stateStyle[state] ?? { [styleKey]: {} };\n this.stateStyle[state][styleKey] = {\n ...(style[styleKey] as unknown as any),\n ...{ referer: mark }\n };\n return;\n }\n\n Object.entries(this.stateStyle).forEach(([state, style]) => {\n Object.entries(style).forEach(([styleKey, style]) => {\n this.stateStyle[state][styleKey].referer = mark;\n });\n });\n }\n\n setPostProcess<U extends keyof T>(key: U, postProcessFunc: any, state: StateValueType = 'normal') {\n if (this.stateStyle[state]?.[key]) {\n this.stateStyle[state][key].postProcess = postProcessFunc;\n }\n }\n\n getAttribute<U extends keyof T>(key: U, datum: Datum, state: StateValueType = 'normal') {\n return this._computeAttribute(key, state)(datum);\n }\n\n getAttributesOfState(datum: Datum, state: StateValueType = 'normal') {\n const style = this.stateStyle[state];\n\n if (style) {\n const res: any = {};\n Object.keys(style).forEach(k => {\n if (!this._unCompileChannel[k]) {\n res[k] = this._computeAttribute(k, state)(datum);\n }\n });\n return res;\n }\n }\n\n setAttribute<U extends keyof T>(\n attr: U,\n style: MarkInputStyle<T[U]>,\n state: StateValueType = 'normal',\n level: number = 0\n ) {\n if (this.stateStyle[state] === undefined) {\n this.stateStyle[state] = {};\n }\n\n if (this.stateStyle[state][attr] === undefined) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this.stateStyle[state][attr] = {\n level,\n style,\n referer: undefined\n };\n }\n const attrLevel = this.stateStyle[state][attr]?.level;\n if (isValid(attrLevel) && attrLevel <= level) {\n mergeSpec(this.stateStyle[state][attr], { style, level });\n }\n\n // some attr has extension channel in VChart to make some effect\n if (state !== 'normal') {\n if (attr in this._extensionChannel) {\n this._extensionChannel[attr].forEach(key => {\n if (this.stateStyle[state][key] === undefined) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this.stateStyle[state][key as keyof T] = this.stateStyle.normal[key];\n }\n });\n }\n }\n }\n\n /**\n * 与 vgrammar 默认值一致的样式可以不设置默认值或设置为undefined, 减少encode属性\n */\n protected _getDefaultStyle() {\n return {\n visible: true,\n // mark的层级应该在mark层 不在encode属性层\n // zIndex: LayoutZIndex.Mark,\n x: 0,\n y: 0\n } as IMarkStyle<T>;\n }\n\n // /**\n // * 获取该 mark 不支持的图形属性,由子类覆写\n // * @returns\n // */\n // protected getIgnoreAttributes(): string[] {\n // return [];\n // }\n\n protected _styleConvert<U extends keyof T>(style?: MarkInputStyle<T[U]>): StyleConvert<T[U]> | undefined {\n if (!style) {\n return style as undefined;\n }\n // visual spec 转换为 scale 类型的mark style\n if (isValidScaleType((style as IVisualSpecStyle<unknown, T[U]>).type) || (style as IVisualScale).scale) {\n // const _style = style as IVisual<T[U]>;\n const scale = createScaleWithSpec(style as IVisual<T[U]>, {\n globalScale: this._option.globalScale,\n seriesId: this._option.seriesId\n });\n if (scale) {\n return {\n scale,\n field: (style as IVisual<T[U]>).field,\n changeDomain: (style as IVisualScale).changeDomain\n };\n }\n }\n return style as StyleConvert<T[U]>;\n }\n\n protected _computeAttribute<U extends keyof T>(key: U, state: StateValueType) {\n let stateStyle = this.stateStyle[state]?.[key];\n if (!stateStyle) {\n stateStyle = this.stateStyle.normal[key];\n }\n const baseValueFunctor = this._computeStateAttribute(stateStyle, key, state);\n const hasPostProcess = isFunction(stateStyle?.postProcess);\n const hasExCompute = key in this._computeExChannel;\n\n if (hasPostProcess && hasExCompute) {\n const exCompute = this._computeExChannel[key];\n return (datum: Datum) => {\n let baseValue = baseValueFunctor(datum);\n\n baseValue = stateStyle.postProcess(baseValue, datum, this._attributeContext, this.getDataView());\n\n return exCompute(key, datum, state, baseValue);\n };\n } else if (hasPostProcess) {\n return (datum: Datum) => {\n return stateStyle.postProcess(baseValueFunctor(datum), datum, this._attributeContext, this.getDataView());\n };\n } else if (hasExCompute) {\n const exCompute = this._computeExChannel[key];\n return (datum: Datum) => {\n return exCompute(key, datum, state, baseValueFunctor(datum));\n };\n }\n return baseValueFunctor;\n }\n\n protected _computeStateAttribute<U extends keyof T>(stateStyle: any, key: U, state: StateValueType) {\n if (!stateStyle) {\n return (datum: Datum) => undefined as any;\n }\n if (stateStyle.referer) {\n return stateStyle.referer._computeAttribute(key, state);\n }\n if (!stateStyle.style) {\n return (datum: Datum) => stateStyle.style;\n }\n\n if (typeof stateStyle.style === 'function') {\n return (datum: Datum) => stateStyle.style(datum, this._attributeContext, { mark: this }, this.getDataView());\n }\n\n if (GradientType.includes(stateStyle.style.gradient)) {\n // 渐变色处理,支持各个属性回调\n return this._computeGradientAttr(stateStyle.style);\n }\n\n if (['outerBorder', 'innerBorder'].includes(key as string)) {\n // 内外描边处理,支持各个属性回调\n return this._computeBorderAttr(stateStyle.style);\n }\n\n if (isValidScaleType(stateStyle.style.scale?.type)) {\n return (datum: Datum) => {\n let data = datum;\n if (this.model.modelType === 'series' && (this.model as unknown as ISeries).getMarkData) {\n data = (this.model as unknown as ISeries).getMarkData(datum);\n }\n\n return stateStyle.style.scale.scale(data[stateStyle.style.field]);\n };\n }\n return (datum: Datum) => {\n return stateStyle.style;\n };\n }\n\n private _initStyle(): void {\n const defaultStyle = this._getDefaultStyle();\n this.setStyle(defaultStyle, 'normal', 0);\n }\n\n private _initSpecStyle(spec: IMarkSpec<T>) {\n // style\n if (spec.style) {\n this.setStyle(spec.style, 'normal', AttributeLevel.User_Mark);\n }\n const state = spec.state;\n if (state) {\n Object.keys(state).forEach(key => {\n const stateTemp = state[key];\n if ('style' in stateTemp) {\n const style = stateTemp.style;\n let stateInfo: IStateInfo = { stateValue: key };\n if ('level' in stateTemp) {\n stateInfo.level = stateTemp.level as number;\n }\n if ('filter' in stateTemp) {\n if (isFunction(stateTemp.filter)) {\n stateInfo = {\n filter: stateTemp.filter as (datum: any, options: Record<string, any>) => boolean,\n ...stateInfo\n };\n } else {\n stateInfo = { ...stateTemp.filter, ...stateInfo };\n }\n }\n this.state.addStateInfo(stateInfo);\n this.setStyle(style as ConvertToMarkStyleSpec<T>, key, AttributeLevel.User_Mark);\n } else {\n this.setStyle(stateTemp, key, AttributeLevel.User_Mark);\n }\n });\n }\n }\n\n private _computeGradientAttr(gradientStyle: any) {\n const { gradient, scale, field, ...rest } = gradientStyle;\n\n let colorScale = scale;\n let colorField = field;\n if ((!scale || !field) && this.model.modelType === 'series') {\n // 目前只有series有这个属性\n const { scale: globalColorScale, field: globalField } = (this.model as BaseSeries<any>).getColorAttribute();\n if (!scale) {\n // 获取全局的 colorScale\n colorScale = globalColorScale;\n }\n if (!colorField) {\n colorField = globalField;\n }\n }\n\n const themeColor = computeActualDataScheme(\n getDataScheme(\n this.model.getColorScheme(),\n this.model.modelType === 'series' ? this.model.getSpec?.() : undefined\n ),\n (this.model as unknown as ISeries).getDefaultColorDomain()\n );\n // 默认配置处理\n const mergedStyle = {\n ...(DEFAULT_GRADIENT_CONFIG as any)[gradient],\n ...rest\n };\n return (data: Datum) => {\n const computeStyle: any = {};\n const markData = this.getDataView();\n Object.keys(mergedStyle).forEach(key => {\n const value = mergedStyle[key];\n if (key === 'stops') {\n computeStyle.stops = value.map((stop: GradientStop) => {\n const { opacity, color, offset } = stop;\n let computeColor = color ?? colorScale?.scale(data[colorField]);\n if (isFunction(color)) {\n computeColor = color(data, this._attributeContext, markData);\n }\n\n if (isValid(opacity)) {\n computeColor = Color.SetOpacity(computeColor as string, opacity);\n }\n\n return {\n offset: isFunction(offset) ? offset(data, this._attributeContext, markData) : offset,\n color: computeColor || themeColor[0]\n };\n });\n } else if (isFunction(value)) {\n computeStyle[key] = value(data, this._attributeContext, markData);\n } else {\n computeStyle[key] = value;\n }\n });\n\n computeStyle.gradient = gradient;\n\n return computeStyle;\n };\n }\n\n private _computeBorderAttr(borderStyle: any) {\n const { scale, field, ...mergedStyle } = borderStyle;\n\n return (data: Datum) => {\n const computeStyle: any = {};\n\n Object.keys(mergedStyle).forEach(key => {\n const value = mergedStyle[key];\n if (isFunction(value)) {\n computeStyle[key] = value(data, this._attributeContext, this.getDataView());\n } else {\n computeStyle[key] = value;\n }\n });\n if (!('stroke' in computeStyle)) {\n const themeColor = computeActualDataScheme(\n getDataScheme(\n this.model.getColorScheme(),\n this.model.modelType === 'series' ? this.model.getSpec?.() : undefined\n ),\n (this.model as unknown as ISeries).getDefaultColorDomain()\n );\n let colorScale = scale;\n let colorField = field;\n if ((!scale || !field) && this.model.modelType === 'series') {\n // 目前只有series有这个属性\n const { scale: globalColorScale, field: globalField } = (this.model as BaseSeries<any>).getColorAttribute();\n if (!scale) {\n // 获取全局的 colorScale\n colorScale = globalColorScale;\n }\n if (!colorField) {\n colorField = globalField;\n }\n computeStyle.stroke = colorScale?.scale(data[colorField]) || themeColor[0];\n }\n } else if (GradientType.includes(mergedStyle.stroke?.gradient)) {\n computeStyle.stroke = this._computeGradientAttr(mergedStyle.stroke)(data);\n }\n return computeStyle;\n };\n }\n\n protected _dataByGroup: GroupedData<Datum>;\n /**\n * 最新的数据map\n */\n protected _dataByKey: GroupedData<Datum>;\n /**\n * 上一次的数据map\n */\n protected _prevDataByKey: GroupedData<Datum>;\n protected _graphicMap: Map<string, IMarkGraphic> = new Map();\n protected _graphics: IMarkGraphic[] = [];\n /**\n * only need to clear elements after join and render\n * but `handleRenderEnd` will be call after every render\n */\n needClear?: boolean;\n\n protected _keyGetter: (datum: Datum) => string;\n protected _groupKeyGetter: (datum: Datum) => string;\n protected renderContext?: {\n parameters?: any;\n progressive?: ProgressiveContext;\n beforeTransformProgressive?: IProgressiveTransformResult;\n };\n protected _attrsByGroup?: Record<string, T>;\n\n protected _getDataByKey(data: Datum[]) {\n return groupData(data, (datum: Datum, index: number) => {\n return `${this._groupKeyGetter(datum)}_${this._keyGetter(datum) ?? index}`;\n });\n }\n\n protected _getCommonContext() {\n return {\n compiler: this.getCompiler(),\n markType: this.type as MarkTypeEnum,\n markId: this.id,\n modelId: this.model.id,\n markUserId: this._userId,\n modelUserId: this.model.userId\n };\n }\n\n prepareMorph(mark: IMark) {\n this._lastMark = mark;\n }\n\n reuse(mark: IMark) {\n if (this.type !== mark.type) {\n return;\n }\n this._product = mark.getProduct();\n this._graphics = mark.getGraphics();\n this._graphicMap = (mark as any)._graphicMap;\n\n this._graphicMap.forEach(g => {\n g.context = { ...g.context, ...this._getCommonContext() };\n });\n this._dataByKey = (mark as any)._dataByKey;\n this._prevDataByKey = (mark as any)._prevDataByKey;\n this.needClear = (mark as any).needClear;\n }\n\n private _parseProgressiveContext(data: Datum[]) {\n const enableProgressive =\n this._markConfig.progressiveStep > 0 &&\n this._markConfig.progressiveThreshold > 0 &&\n this._markConfig.progressiveStep < this._markConfig.progressiveThreshold;\n const large =\n this._markConfig.large && this._markConfig.largeThreshold > 0 && data.length >= this._markConfig.largeThreshold;\n\n if (enableProgressive) {\n const groupedData = this._dataByGroup;\n\n if (\n groupedData &&\n groupedData.keys &&\n groupedData.keys.some(key => groupedData.data.get(key).length > this._markConfig.progressiveThreshold)\n ) {\n return {\n large,\n progressive: {\n data,\n step: this._markConfig.progressiveStep,\n currentIndex: 0,\n totalStep: groupedData.keys.reduce((total, key) => {\n return Math.max(Math.ceil(groupedData.data.get(key).length / this._markConfig.progressiveStep), total);\n }, 1),\n groupedData: groupedData.data as Map<string, any[]>\n }\n };\n }\n\n return { large };\n }\n\n return {\n large\n };\n }\n\n getGraphics() {\n return this._graphics;\n }\n\n protected _createGraphic(attrs: any = {}): IGraphic {\n return Factory.createGraphicComponent(this.type, attrs);\n }\n\n protected _runGroupData(data: Datum[]) {\n this._keyGetter = isFunction(this.key)\n ? (this.key as (datum: Datum) => string)\n : isValid(this.key)\n ? (datum: Datum) => datum?.[this.key as string]\n : (datum: Datum) => datum?.[DEFAULT_DATA_KEY];\n this._groupKeyGetter = isValid(this._groupKey)\n ? (datum: Datum) => {\n return `${datum?.[this._groupKey]}`;\n }\n : () => 'key';\n\n this._dataByGroup = groupData(data, this._groupKeyGetter);\n }\n\n protected createAnimationStateList(type: string, animationConfig: Partial<MarkAnimationSpec>) {\n let config = (animationConfig as any)[type];\n if (config && Array.isArray(config)) {\n config = config.length === 1 ? config[0] : config;\n }\n // TODO 因为数据的覆盖特点,无动画的时候新的更新一定会覆盖前一次的旧值,所以默认都是后面的动画覆盖前面的动画\n // TODO 但是如果用户定义了一个动画数组,他的预期是动画不会覆盖,通过priority为INfinity来控制不覆盖\n if (Array.isArray(config)) {\n return config.map((item: any, index: number) => ({\n ...item,\n priority: item.priority ?? Infinity\n }));\n }\n return config\n ? {\n ...config,\n // 循环动画的优先级定为最高,不会被屏蔽掉\n priority: type === 'normal' ? config.priority ?? Infinity : config.priority\n }\n : config;\n }\n\n /**\n * 尝试执行morphing动画\n * @param graphics\n * @returns\n */\n protected tryRunMorphing(graphics: IMarkGraphic[]) {\n if (this._lastMark) {\n // 得设置入场图元的属性\n graphics.forEach(g => {\n if (g.context.animationState === 'appear' || g.context.animationState === 'enter') {\n g.setAttributes((g.getAttributes as any)(true));\n }\n });\n const res = runMorph([this._lastMark], [this as any], {});\n this._lastMark = null;\n return res;\n }\n return false;\n }\n\n protected _runStateAnimation(graphics: IMarkGraphic[]) {\n if (!this._animationConfig || graphics.length === 0) {\n return;\n }\n\n if (this.tryRunMorphing(graphics)) {\n return;\n }\n const animationConfig = this.getAnimationConfig();\n const useSequentialAnimation = this._markConfig.useSequentialAnimation ?? false;\n if (useSequentialAnimation && (this as any)._runSequentialAnimations) {\n (this as any)._runSequentialAnimations(graphics);\n return;\n }\n // 过滤出appear动画出来,appear动画是整体动画,可以放在全局,同时appear动画和normal动画是串行关系\n const isAppear = graphics.every(g => g.context.animationState === 'appear');\n // const appearConfig = (animationConfig as any).appear?.[0]; // TODO: animation: appear 数组\n const appearConfig = this.createAnimationStateList('appear', animationConfig);\n if (isAppear && this._product) {\n // TODO 一般appear都在最开始执行,所以这里不需要停掉normal动画\n // (this._product as IGroup).stopAnimationState('normal');\n const stateArray = appearConfig ? ['appear'] : [];\n const configArray = appearConfig\n ? [\n {\n name: 'appear',\n animation: appearConfig\n }\n ]\n : [];\n\n if ((animationConfig as any).normal) {\n stateArray.push('normal');\n const normal = this.createAnimationStateList('normal', animationConfig);\n const normalConfig = {\n name: 'normal',\n animation: normal\n };\n\n configArray.push(normalConfig);\n }\n this._product.applyAnimationState(stateArray, configArray);\n }\n\n // 判断是否需要走normal动画,enter动画执行完成后,需要跟一个normal动画\n let shouldRunNormal = false;\n // 处理除了appear以外的动画\n graphics.forEach(g => {\n const state = g.context.animationState;\n if (state === 'appear') {\n return;\n }\n const config = (animationConfig as any)[state] as any;\n if (config && config.length > 0) {\n const configList = config.map((item: any, index: number) => ({\n name: `${state}_${index}`,\n animation: item\n }));\n\n configList.forEach((item: any) => {\n item.animation.customParameters = g.context;\n });\n\n // configList.forEach((item: any) => {\n // item.animation.customParameters = g.context;\n // });\n const stateArray = [state];\n\n g.applyAnimationState(stateArray, [configList.length === 1 ? configList[0] : configList]);\n // configList.forEach((item: any) => {\n // item.animation.customParameters = null;\n // });\n }\n if (state === 'enter' && animationConfig.normal) {\n shouldRunNormal = true;\n }\n });\n\n if (shouldRunNormal && this._product && (animationConfig as any).normal?.length) {\n // 停止normal动画,并回复最初的属性\n (this._product as IGroup).stopAnimationState('normal', 'start');\n const normal = this.createAnimationStateList('normal', animationConfig);\n const normalConfig = {\n name: 'normal',\n animation: normal\n };\n (this._product as IGroup).applyAnimationState(['normal'], [normalConfig]);\n }\n }\n\n protected _setAnimationState(g: IMarkGraphic) {\n const callback =\n (this.type === MarkTypeEnum.component\n ? this.model.getAnimationStateCallback()\n : (this.model as ISeries).getRegion?.()?.getAnimationStateCallback()) ||\n ((g: IMarkGraphic) => {\n const diffState = g.context?.diffState;\n return diffState === AnimationStateEnum.exit\n ? AnimationStateEnum.exit\n : diffState === AnimationStateEnum.update\n ? AnimationStateEnum.update\n : AnimationStateEnum.appear;\n });\n const customizedState = callback(g);\n\n g.context.animationState = customizedState ?? g.context.diffState;\n\n // 复用exit的图元,需要设置属性为最初的属性\n if (g.context.animationState === DiffState.exit) {\n // 表示正在被复用,后续需要重设属性的\n g.context.reusing = true;\n // 停止所有动画,\n // TODO:属性可能回不去了(如果enter和exit不是一个动画),所以在encode阶段要获取finalAttribute,设置上去\n (g as any).animates && (g as any).animates.forEach((a: any) => a.stop());\n // force element to stop exit animation if it is reentered\n // todo animaiton\n // const animators = this.animate?.getElementAnimators(element, DiffState.exit);\n // animators && animators.forEach(animator => animator.stop('start'));\n }\n }\n\n protected _runJoin(data: Datum[]) {\n const newGroupedData = this._getDataByKey(data);\n const prevGroupedData = this._prevDataByKey;\n const allGraphics: IMarkGraphic[] = [];\n\n const enterGraphics = new Set<IMarkGraphic>(this._graphics.filter(g => g.context.diffState === DiffState.enter));\n\n const callback = (key: string, newData: Datum[], prevData: Datum[]) => {\n let g: IMarkGraphic;\n let diffState: DiffStateValues;\n\n if (isNil(newData)) {\n g = this._graphicMap.get(key);\n\n if (g) {\n diffState = DiffState.exit;\n }\n } else if (isNil(prevData)) {\n // enter\n if (this._graphicMap.has(key)) {\n g = this._graphicMap.get(key);\n } else {\n g = {} as IMarkGraphic; //\n }\n diffState = DiffState.enter;\n g.isExiting = false;\n\n this._graphicMap.set(key, g as IMarkGraphic);\n allGraphics.push(g as IMarkGraphic);\n } else {\n // update\n g = this._graphicMap.get(key);\n\n if (g) {\n diffState = DiffState.update;\n allGraphics.push(g);\n }\n }\n\n if (g) {\n enterGraphics.delete(g);\n g.context = {\n ...this._getCommonContext(),\n diffState,\n // 从旧context中继承\n reusing: g.context?.reusing,\n // 从旧context中继承\n originalFieldX: g.context?.originalFieldX,\n // 从旧context中继承\n originalFieldY: g.context?.originalFieldY,\n // 从旧context中继承\n fieldX: g.context?.fieldX,\n // 从旧context中继承\n fieldY: g.context?.fieldY,\n // TODO 如果newData为空,则使用旧的data,避免exit图元找不到data\n data: newData ?? g.context?.data,\n uniqueKey: key,\n key: newData ? this._keyGetter(newData[0]) : g.context?.key,\n groupKey: newData ? this._groupKeyGetter(newData[0]) : g.context?.groupKey,\n // TODO 用于判定这个图元是第几个,在OneByOne动画中控制顺序\n indexKey: '__VCHART_DEFAULT_DATA_INDEX',\n stateAnimateConfig: this.getAnimationConfig()?.state\n };\n this._setAnimationState(g);\n }\n return g;\n };\n\n if (prevGroupedData && newGroupedData) {\n const prevMap = new Map(prevGroupedData.data);\n const newKeys = newGroupedData.keys;\n\n newKeys.forEach(key => {\n callback(key, newGroupedData.data.get(key), prevMap.get(key));\n prevMap.delete(key);\n });\n\n prevGroupedData.keys.forEach(key => {\n if (prevMap.has(key)) {\n callback(key, null, prevMap.get(key));\n }\n });\n } else if (newGroupedData) {\n newGroupedData.keys.forEach(key => {\n // appear\n const g = callback(key, newGroupedData.data.get(key), null);\n if (g) {\n g.context.animationState = AnimationStateEnum.appear;\n // this._setAnimationState(g);\n }\n });\n } else if (prevGroupedData) {\n prevGroupedData.keys.forEach(key => {\n // disappear\n const g = callback(key, null, prevGroupedData.data.get(key));\n g.context.animationState = AnimationStateEnum.disappear;\n // this._setAnimationState(g);\n });\n }\n\n // Enter elements between dataflow start data and end data should be removed directly.\n enterGraphics.forEach(g => {\n this._graphicMap.delete(g.context.uniqueKey);\n\n if ((g as IMarkGraphic).parent) {\n (g as IMarkGraphic).parent.removeChild(g as IMarkGraphic);\n }\n\n (g as IMarkGraphic).release();\n });\n const graphicCount = allGraphics.length;\n allGraphics.forEach((g, index) => {\n g.context.graphicCount = graphicCount;\n g.context.graphicIndex = index;\n });\n this._dataByKey = newGroupedData;\n this._graphics = allGraphics;\n this.needClear = true;\n }\n\n _runEncoderOfGraphic(styles: Record<string, (datum: Datum) => any>, g: IMarkGraphic, attrs: any = {}) {\n return runEncoder(styles, g.context.data[0], attrs);\n }\n\n _runGroupEncoder(groupStyles: Record<string, (datum: Datum) => any>) {\n if (!this._dataByGroup) {\n return null;\n }\n\n const attrsByGroup: any = {};\n\n this._dataByGroup.keys.forEach(key => {\n attrsByGroup[key] = runEncoder(groupStyles, this._dataByGroup.data.get(key)[0]);\n });\n this._attrsByGroup = attrsByGroup;\n\n return attrsByGroup;\n }\n\n protected _transformGraphicAttributes(g: IMarkGraphic, attrs: any, groupAttrs?: any) {\n return {\n ...groupAttrs,\n ...attrs\n };\n }\n\n protected _separateNormalStyle(normalStyle: Partial<IAttrs<T>>) {\n const updateStyles = {};\n const groupStyles = {};\n\n Object.keys(normalStyle).forEach(key => {\n if (this._unCompileChannel[key]) {\n return;\n }\n\n if (this._option.noSeparateStyle || isStateAttrChangeable(key, normalStyle, this._groupKey)) {\n (updateStyles as any)[key] = normalStyle[key];\n } else {\n (groupStyles as any)[key] = normalStyle[key];\n }\n });\n\n return { updateStyles, groupStyles };\n }\n\n protected _getEncoderOfStyle = (stateName: string, style: Partial<IAttrs<T>>) => {\n if (style && stateName) {\n const validEncoder: Record<string, (datum: Datum) => any> = {};\n Object.keys(style).forEach(key => {\n if (this._unCompileChannel[key]) {\n return;\n }\n\n validEncoder[key] = this._computeAttribute(key, stateName);\n });\n\n return validEncoder;\n }\n\n return null;\n };\n\n protected _setGraphicFromMarkConfig = (g: IMarkGraphic) => {\n const { setCustomizedShape, graphicName } = this._markConfig;\n\n if (setCustomizedShape) {\n g.pathProxy = (attrs: Partial<IGraphicAttribute>) => {\n return setCustomizedShape(g.context.data, attrs, new CustomPath2D());\n };\n }\n\n if (graphicName) {\n if (isFunction(graphicName)) {\n g.name = (graphicName as (e: IMarkGraphic) => string)(g);\n } else {\n g.name = graphicName as string;\n }\n }\n };\n\n protected _setStateOfGraphic = (g: IMarkGraphic) => {\n g.clearStates();\n g.stateProxy = null;\n\n if (g.context.diffState === DiffState.enter || g.context.diffState === DiffState.update) {\n g.stateProxy = (stateName: string, nexStates: string[]) => {\n return this._runEncoderOfGraphic(this._encoderOfState?.[stateName], g);\n };\n\n g.context.states && g.useStates(g.context.states);\n }\n };\n\n protected _addProgressiveGraphic(parent: IGroup, g: IMarkGraphic) {\n (parent as IGroup).incrementalAppendChild(g);\n }\n\n protected _runEncoder(graphics: IMarkGraphic[], noGroupEncode?: boolean) {\n const attrsByGroup = noGroupEncode ? null : this._runGroupEncoder(this._encoderOfState?.group);\n\n graphics.forEach((g, index) => {\n const attrs = this._runEncoderOfGraphic(this._encoderOfState?.update, g);\n\n // 配置的优先级高于encoder\n if (!isNil(this._markConfig.interactive)) {\n attrs.pickable = this._markConfig.interactive;\n }\n const finalAttrs = this._transformGraphicAttributes(g, attrs, attrsByGroup?.[g.context.groupKey]);\n\n g.context.finalAttrs = finalAttrs;\n });\n }\n\n protected _runApplyGraphic(graphics: IMarkGraphic[]) {\n const hasAnimation = this.hasAnimation();\n\n graphics.forEach((g, index) => {\n const finalAttrs = g.context.finalAttrs;\n\n const hasStateAnimation = this.hasAnimationByState(g.context.animationState);\n // 新创建的graphic\n if (!(g as any).setAttributes) {\n const mockGraphic = g;\n // TODO:如果要走入场、Enter动画,就不用设置值了,保存到diffAttrs中由入场动画自己去设置,因为入场动画可能会延迟执行,所以首帧不能直接设置属性\n // TODO 太麻烦了,会影响后续bounds等计算逻辑,还是首帧设置吧。。。\n g = this._createGraphic(finalAttrs) as IMarkGraphic;\n // g = this._createGraphic(finalAttrs) as IMarkGraphic;\n // 如果有动画,设置一下最终attribute\n if (hasAnimation) {\n g.setFinalAttributes(finalAttrs);\n }\n g.context = mockGraphic.context;\n g.context.diffAttrs = finalAttrs;\n\n const gIndex = this._graphics === graphics ? index : index + this._graphics.length - graphics.length;\n if (gIndex >= 0) {\n this._graphics[gIndex] = g;\n }\n\n if (this.renderContext?.progressive) {\n const groupIndex = this._dataByGroup ? this._dataByGroup.keys.indexOf(g.context.groupKey) : 0;\n const group = groupIndex >= 0 ? this._product.getChildAt(groupIndex) : null;\n if (group) {\n this._addProgressiveGraphic(group as IGroup, g);\n }\n } else {\n this._product.appendChild(g);\n this._graphicMap.set(g.context.uniqueKey, g);\n }\n } else {\n const diffAttrs = getDiffAttributesOfGraphic(g, finalAttrs);\n g.context.diffAttrs = diffAttrs;\n if (g.context.reusing) {\n // 表示正在被复用,需要重设属性的\n // TODO 理论上复用后只会走一次enter,所以这里lastAttrs不需要后续清除,这里需要硬拷贝(通过initAttributes重设属性也行)\n g.context.lastAttrs = g.attribute;\n g.initAttributes({});\n // 为了避免exit一些和enter不一样的属性,所以这里要重置属性\n // const finalAttrs = g.getFinalAttribute();\n // finalAttrs && g.initAttributes({ ...finalAttrs });\n // g.initAttributes(finalAttrs);\n g.context.reusing = false;\n } else if (!hasStateAnimation) {\n // 不是正在被复用的属性,也不需要走动画,那就设置属性\n hasAnimation ? g.setAttributesAndPreventAnimate(diffAttrs) : g.setAttributes(diffAttrs);\n }\n\n // 如果有动画,需要设置值\n if (hasAnimation) {\n g.setFinalAttributes(finalAttrs);\n }\n }\n\n this._setStateOfGraphic(g);\n this._setGraphicFromMarkConfig(g);\n });\n }\n\n protected _updateEncoderByState() {\n const encoderOfState: Record<string, Record<string, (datum: Datum) => any>> = {};\n\n Object.keys(this.stateStyle).forEach(stateName => {\n if (stateName === STATE_VALUE_ENUM.STATE_NORMAL) {\n const { groupStyles, updateStyles } = this._separateNormalStyle(this.stateStyle[stateName]);\n\n encoderOfState.group = this._getEncoderOfStyle(stateName, groupStyles);\n encoderOfState.update = this._getEncoderOfStyle(stateName, updateStyles);\n } else {\n encoderOfState[stateName] = this._getEncoderOfStyle(stateName, this.stateStyle[stateName]);\n }\n });\n\n this._encoderOfState = encoderOfState;\n }\n\n protected _runState(graphics: IMarkGraphic[]) {\n graphics.forEach(g => {\n const prevInteractionStateValues = (g.currentStates ?? []).filter((sv: string) => {\n return !this.state.getStateInfo(sv);\n });\n const newStateValues = [...prevInteractionStateValues, ...this.state.checkState(g, g.context.data)];\n\n if (this._stateSort && newStateValues.length) {\n newStateValues.sort(this._stateSort);\n }\n // const prevStateValues = g.context.states;\n // const isStateChanged =\n // newStateValues.length !== prevStateValues.length ||\n // newStateValues.some((newState: string, index: number) => newState !== prevStateValues[index]);\n\n g.context.states = newStateValues;\n });\n }\n\n protected _getAttrsFromConfig(attrs: IGroupGraphicAttribute = {}): IGroupGraphicAttribute {\n const { zIndex, clip, clipPath, overflow } = this._markConfig;\n\n if (!isNil(zIndex)) {\n attrs.zIndex = zIndex;\n }\n\n if (!isNil(clip)) {\n attrs.clip = clip;\n }\n\n if (!isNil(clipPath)) {\n const paths = isArray(clipPath) ? clipPath : clipPath(this._graphics);\n\n if (paths && paths.length) {\n attrs.path = paths;\n } else {\n attrs.clip = false;\n attrs.path = paths;\n }\n }\n\n if (!isNil(overflow)) {\n attrs.overflow = overflow;\n }\n\n return attrs;\n }\n\n protected _updateAttrsOfGroup() {\n const attrs = this._getAttrsFromConfig();\n\n this._product?.setAttributes(attrs);\n\n if (this._markConfig.support3d && this._product) {\n this._product.setMode('3d');\n }\n }\n\n protected _runBeforeTransform(data: Datum[]) {\n const transforms = this._transform?.filter(transformSpec => {\n if (transformSpec.type) {\n const transform = Factory.getGrammarTransform(transformSpec.type);\n return transform && (!transform.runType || transform.runType === 'beforeJoin');\n }\n\n return false;\n });\n\n return this.runTransforms(transforms, data);\n }\n\n protected _runEncoderTransform(data: Datum[], isProgressive: boolean) {\n const transforms = this._transform?.filter(transformSpec => {\n if (transformSpec.type) {\n const transform = Factory.getGrammarTransform(transformSpec.type);\n return transform && transform.runType === 'afterEncode' && !!transform.canProgressive === isProgressive;\n }\n\n return false;\n });\n\n return this.runTransforms(transforms, data);\n }\n\n renderInner() {\n this._updateEncoderByState();\n\n const data = this._data?.getProduct() ?? [{}];\n\n const transformData = this._runBeforeTransform(data);\n let markData: Datum[];\n\n if ((transformData as any)?.progressive) {\n this.renderContext = {\n beforeTransformProgressive: (transformData as any).progressive as IProgressiveTransformResult\n };\n const p = (transformData as any).progressive;\n if (p.canAnimate && p.canAnimate() && p.unfinished()) {\n this._updateAttrsOfGroup();\n return;\n }\n markData = p.output();\n } else {\n markData = array(transformData);\n this._runGroupData(markData);\n this.renderContext = this._parseProgressiveContext(markData);\n }\n\n if (this.renderContext?.progressive) {\n this._graphicMap.clear();\n this._runProgressiveStep();\n } else {\n this._runJoin(markData);\n this._runState(this._graphics);\n this._runEncoder(this._graphics);\n this._runEncoderTransform(this._graphics, false);\n this._runApplyGraphic(this._graphics);\n }\n\n this._updateAttrsOfGroup();\n }\n\n render() {\n if (this.isCommited()) {\n if (\n this.getVisible() &&\n (!this._skipBeforeLayouted || this.getCompiler().getLayoutState() !== LayoutState.before)\n ) {\n log(`render mark: ${this.getProductId()}, type is ${this.type}`);\n this.renderInner();\n }\n\n this.uncommit();\n }\n }\n\n updateMarkState(key: string): void {\n if (!this._product) {\n return;\n }\n const stateInfo = this.state.getStateInfo(key);\n\n this._graphics.forEach(g => {\n if (this.state.checkOneState(g, g.context.data, stateInfo) === 'in') {\n g.addState(key, true, this.hasAnimationByState('state'));\n } else {\n g.removeState(key, this.hasAnimationByState('state'));\n }\n });\n }\n\n clearExitGraphics() {\n this._prevDataByKey = this._dataByKey;\n\n const doRemove = (g: IMarkGraphic, key: string) => {\n this._graphicMap.delete(key);\n if (g.parent) {\n g.parent.removeChild(g);\n }\n if (g.release) {\n g.release();\n }\n };\n this._graphicMap.forEach((g, key) => {\n if (g.context.diffState !== DiffState.exit || g.isExiting) {\n return;\n }\n // 避免重复执行退场动画\n if (g.context.animationState === DiffState.exit && this.hasAnimationByState('exit')) {\n g.isExiting = true;\n // 执行exit动画\n const animationConfig = this.getAnimationConfig();\n if ((animationConfig as any).exit && (animationConfig as any).exit.length) {\n const exitConfigList = (animationConfig as any).exit.map((item: any, index: number) => ({\n name: `exit_${index}`,\n animation: {\n ...item,\n customParameters: g.context\n }\n }));\n g.applyAnimationState(['exit'], [exitConfigList.length === 1 ? exitConfigList[0] : exitConfigList], () => {\n // 有可能又被复用了,所以这里需要判断,如果还是在exiting阶段的话才删除\n // TODO 这里如果频繁执行的话,可能会误判\n doRemove(g, key);\n });\n }\n } else {\n doRemove(g, key);\n }\n });\n }\n\n isProgressive() {\n return this.renderContext && (!!this.renderContext.progressive || !!this.renderContext.beforeTransformProgressive);\n }\n\n canAnimateAfterProgressive() {\n return (\n this.renderContext &&\n this.renderContext.beforeTransformProgressive &&\n this.renderContext.beforeTransformProgressive.canAnimate?.()\n );\n }\n\n isDoingProgressive() {\n return (\n this.renderContext &&\n ((this.renderContext.progressive &&\n this.renderContext.progressive.currentIndex < this.renderContext.progressive.totalStep) ||\n (this.renderContext.beforeTransformProgressive && this.renderContext.beforeTransformProgressive.unfinished()))\n );\n }\n\n clearProgressive() {\n if (this.renderContext && this.renderContext.progressive) {\n this._graphics = [];\n\n (this._product as any).children.forEach((group: IGroup) => {\n group.incrementalClearChild();\n });\n (this._product as any).removeAllChild();\n }\n\n if (this.renderContext && this.renderContext.beforeTransformProgressive) {\n this.renderContext.beforeTransformProgressive.release();\n }\n\n this.renderContext = null;\n }\n\n restartProgressive() {\n if (this.renderContext && this.renderContext.progressive) {\n this.renderContext.progressive.currentIndex = 0;\n }\n }\n private _runBeforeProgressive() {\n const transform = this.renderContext.beforeTransformProgressive;\n\n transform.progressiveRun();\n const output = transform.output();\n\n if (transform.canAnimate?.()) {\n if (transform.unfinished()) {\n return;\n }\n\n this._runGroupData(output);\n this._runJoin(output);\n this._runState(this._graphics);\n this._runEncoder(this._graphics);\n this._runApplyGraphic(this._graphics);\n }\n }\n\n protected _runProgressiveJoin(): {\n graphicsByGroup?: Record<string, IMarkGraphic[]>;\n graphics?: IMarkGraphic[];\n needUpdate?: boolean;\n } {\n const currentIndex = this.renderContext.progressive.currentIndex;\n\n const graphics: IMarkGraphic[] = [];\n const graphicsByGroup: Record<string, IMarkGraphic[]> = {};\n this._dataByGroup.keys.forEach(groupKey => {\n const data = this.renderContext.progressive.groupedData.get(groupKey as string);\n const groupStep = this.renderContext.progressive.step;\n const dataSlice = data.slice(currentIndex * groupStep, (currentIndex + 1) * groupStep);\n const group: IMarkGraphic[] = [];\n\n dataSlice.forEach((entry, i) => {\n const key = this._keyGetter(entry);\n const g = {\n context: {\n ...this._getCommonContext(),\n diffState: DiffState.enter,\n data: [entry],\n uniqueKey: `${groupKey}_${key ?? currentIndex * groupStep + i}`,\n key,\n groupKey: groupKey\n }\n };\n\n group.push(g as IMarkGraphic);\n graphics.push(g as IMarkGraphic);\n });\n\n graphicsByGroup[groupKey as string] = group;\n });\n\n return { graphicsByGroup, graphics, needUpdate: true };\n }\n\n protected _createIncrementalGraphics() {\n this._product.removeAllChild();\n\n this._dataByGroup.keys.forEach(key => {\n const graphicItem = createGroup({\n pickable: false,\n zIndex: this._markConfig.zIndex\n });\n graphicItem.incremental = this.renderContext.progressive.step;\n this._product.appendChild(graphicItem);\n });\n }\n\n protected _setCommonAttributesToTheme(g: IMarkGraphic) {\n if (this._attrsByGroup && g) {\n const parent = g.parent;\n\n if (parent && this._attrsByGroup?.[g.context?.groupKey]) {\n parent.setTheme({\n common: this._attrsByGroup[g.context?.groupKey] as any\n });\n }\n }\n }\n\n protected _runProgressiveEncoder(graphics: IMarkGraphic[]) {\n const progressiveIndex = this.renderContext.progressive.currentIndex;\n\n if (progressiveIndex === 0) {\n this._runEncoder(graphics);\n } else {\n this._runEncoder(graphics, true);\n }\n }\n\n protected _runProgressiveApplyGraphic(graphics: IMarkGraphic[]) {\n const progressiveIndex = this.renderContext.progressive.currentIndex;\n\n if (progressiveIndex === 0) {\n this._runApplyGraphic(graphics);\n this._setCommonAttributesToTheme(graphics[0]);\n } else {\n this._runApplyGraphic(graphics);\n }\n }\n\n protected _runProgressiveStep() {\n const { graphics, graphicsByGroup, needUpdate } = this._runProgressiveJoin();\n\n if (this.renderContext.progressive.currentIndex === 0) {\n this._createIncrementalGraphics();\n this._graphics = graphics;\n } else if (needUpdate) {\n graphics.forEach(g => {\n this._graphics.push(g);\n });\n }\n this._runState(graphics);\n\n Object.keys(graphicsByGroup).forEach(groupKey => {\n this._runProgressiveEncoder(graphicsByGroup[groupKey]);\n });\n this._runEncoderTransform(this._graphics, true);\n\n Object.keys(graphicsByGroup).forEach(groupKey => {\n this._runProgressiveApplyGraphic(graphicsByGroup[groupKey]);\n });\n\n this.renderContext.progressive.currentIndex += 1;\n }\n\n renderProgressive() {\n if (this.renderContext?.beforeTransformProgressive) {\n this._runBeforeProgressive();\n return;\n } else if (this.renderContext.progressive) {\n this._runProgressiveStep();\n }\n }\n\n hasAnimationByState(state: AnimationStateValues) {\n if (\n !state ||\n !this._animationConfig ||\n !(this._animationConfig as any)[state] ||\n this._disabledAnimationStates.includes(state)\n ) {\n return false;\n }\n const stateAnimationConfig = (this._animationConfig as any)[state];\n return (stateAnimationConfig as IAnimationConfig[]).length > 0 || isObject(stateAnimationConfig);\n }\n\n hasAnimation() {\n if (!this._animationConfig) {\n return false;\n }\n return Object.keys(this._animationConfig).length > 0;\n }\n\n runAnimation() {\n this._runStateAnimation(this.getGraphics());\n }\n}\n"]}
@@ -5,7 +5,7 @@ import type { Datum, StringOrNumber } from '../../typings';
5
5
  import { DataView } from '@visactor/vdataset';
6
6
  import type { ISankeySeriesSpec } from './interface';
7
7
  import type { ExtendEventParam } from '../../event/interface';
8
- import type { ILinkPathMark, IMark, IMarkGraphic, IRectMark, ITextMark } from '../../mark/interface';
8
+ import type { IMark, IMarkGraphic, ITextMark } from '../../mark/interface';
9
9
  import { SankeySeriesSpecTransformer } from './sankey-transformer';
10
10
  import type { ILabelSpec } from '../../component';
11
11
  export declare class SankeySeries<T extends ISankeySeriesSpec = ISankeySeriesSpec> extends CartesianSeries<T> {
@@ -17,8 +17,8 @@ export declare class SankeySeries<T extends ISankeySeriesSpec = ISankeySeriesSpe
17
17
  static readonly builtInTheme: {
18
18
  sankey: import("./interface").ISankeySeriesTheme;
19
19
  };
20
- protected _nodeMark: IRectMark;
21
- protected _linkMark: ILinkPathMark;
20
+ private _nodeMark;
21
+ private _linkMark;
22
22
  private _nodeLayoutZIndex;
23
23
  private _labelLayoutZIndex;
24
24
  protected _nodesSeriesData?: DataView;
@@ -27,7 +27,7 @@ export declare class SankeySeries<T extends ISankeySeriesSpec = ISankeySeriesSpe
27
27
  protected _categoryField: string;
28
28
  private _colorScale;
29
29
  private _nodeList;
30
- protected _needClear: boolean;
30
+ private _needClear;
31
31
  get direction(): "horizontal" | "vertical";
32
32
  getCategoryField(): string;
33
33
  setCategoryField(f: string): string;
@@ -55,12 +55,12 @@ export declare class SankeySeries<T extends ISankeySeriesSpec = ISankeySeriesSpe
55
55
  private nodesSeriesDataUpdate;
56
56
  private linksSeriesDataUpdate;
57
57
  protected _handleEmphasisElement: (params: ExtendEventParam) => void;
58
- protected _handleClearEmpty(): void;
59
- protected _handleNodeAdjacencyClick(graphic: IMarkGraphic): void;
60
- protected _handleLinkAdjacencyClick(graphic: IMarkGraphic): void;
61
- protected _handleNodeRelatedClick(graphic: IMarkGraphic): void;
62
- protected _handleLinkRelatedClick(graphic: IMarkGraphic): void;
63
- protected _highLightElements(graphics: IMarkGraphic[], highlightNodes: (string | number)[]): void;
58
+ protected _handleClearEmpty: () => void;
59
+ protected _handleNodeAdjacencyClick: (graphic: IMarkGraphic) => void;
60
+ protected _handleLinkAdjacencyClick: (graphic: IMarkGraphic) => void;
61
+ protected _handleNodeRelatedClick: (graphic: IMarkGraphic) => void;
62
+ protected _handleLinkRelatedClick: (graphic: IMarkGraphic) => void;
63
+ protected _highLightElements(graphics: IMarkGraphic[], highlightNodes: string[]): void;
64
64
  protected initTooltip(): void;
65
65
  _setNodeOrdinalColorScale(): void;
66
66
  getNodeList(): any;