@visactor/vchart 1.13.8-alpha.5 → 1.13.8-alpha.6

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.
Files changed (84) hide show
  1. package/build/es5/index.js +1 -1
  2. package/build/index.es.js +37 -17
  3. package/build/index.js +37 -17
  4. package/build/index.min.js +1 -1
  5. package/build/tsconfig.tsbuildinfo +1 -1
  6. package/cjs/animation/utils.d.ts +2 -2
  7. package/cjs/chart/base/base-chart.d.ts +3 -3
  8. package/cjs/chart/base/base-chart.js.map +1 -1
  9. package/cjs/chart/interface/chart.d.ts +2 -2
  10. package/cjs/chart/interface/chart.js.map +1 -1
  11. package/cjs/chart/stack.js +2 -2
  12. package/cjs/chart/stack.js.map +1 -1
  13. package/cjs/compile/mark/compilable-mark.d.ts +2 -2
  14. package/cjs/compile/mark/compilable-mark.js.map +1 -1
  15. package/cjs/component/label/interface.d.ts +1 -0
  16. package/cjs/component/label/interface.js.map +1 -1
  17. package/cjs/component/legend/continuous/util.js +3 -2
  18. package/cjs/component/legend/continuous/util.js.map +1 -1
  19. package/cjs/component/legend/discrete/util.js +3 -2
  20. package/cjs/component/legend/discrete/util.js.map +1 -1
  21. package/cjs/constant/event.d.ts +1 -0
  22. package/cjs/constant/event.js +3 -2
  23. package/cjs/constant/event.js.map +1 -1
  24. package/cjs/constant/funnel.js +1 -2
  25. package/cjs/constant/sunburst.js +2 -1
  26. package/cjs/core/index.d.ts +1 -1
  27. package/cjs/core/index.js +1 -1
  28. package/cjs/core/index.js.map +1 -1
  29. package/cjs/core/interface.js +1 -2
  30. package/cjs/core/vchart.js +2 -1
  31. package/cjs/core/vchart.js.map +1 -1
  32. package/cjs/data/transforms/dimension-statistics.js +1 -1
  33. package/cjs/data/transforms/dimension-statistics.js.map +1 -1
  34. package/cjs/event/event-dispatcher.d.ts +4 -1
  35. package/cjs/event/event-dispatcher.js +2 -3
  36. package/cjs/event/event-dispatcher.js.map +1 -1
  37. package/cjs/event/event.d.ts +4 -1
  38. package/cjs/event/event.js.map +1 -1
  39. package/cjs/event/interface.d.ts +8 -2
  40. package/cjs/event/interface.js.map +1 -1
  41. package/cjs/interaction/zoom/zoomable.js +6 -1
  42. package/cjs/interaction/zoom/zoomable.js.map +1 -1
  43. package/cjs/typings/spec/common.d.ts +1 -1
  44. package/cjs/typings/spec/common.js.map +1 -1
  45. package/esm/animation/utils.d.ts +2 -2
  46. package/esm/chart/base/base-chart.d.ts +3 -3
  47. package/esm/chart/base/base-chart.js.map +1 -1
  48. package/esm/chart/interface/chart.d.ts +2 -2
  49. package/esm/chart/interface/chart.js.map +1 -1
  50. package/esm/chart/stack.js +2 -2
  51. package/esm/chart/stack.js.map +1 -1
  52. package/esm/compile/mark/compilable-mark.d.ts +2 -2
  53. package/esm/compile/mark/compilable-mark.js.map +1 -1
  54. package/esm/component/label/interface.d.ts +1 -0
  55. package/esm/component/label/interface.js.map +1 -1
  56. package/esm/component/legend/continuous/util.js +3 -2
  57. package/esm/component/legend/continuous/util.js.map +1 -1
  58. package/esm/component/legend/discrete/util.js +5 -3
  59. package/esm/component/legend/discrete/util.js.map +1 -1
  60. package/esm/constant/event.d.ts +1 -0
  61. package/esm/constant/event.js +2 -0
  62. package/esm/constant/event.js.map +1 -1
  63. package/esm/constant/funnel.js +1 -2
  64. package/esm/constant/sunburst.js +2 -1
  65. package/esm/core/index.d.ts +1 -1
  66. package/esm/core/index.js +1 -1
  67. package/esm/core/index.js.map +1 -1
  68. package/esm/core/interface.js +1 -2
  69. package/esm/core/vchart.js +2 -1
  70. package/esm/core/vchart.js.map +1 -1
  71. package/esm/data/transforms/dimension-statistics.js +1 -1
  72. package/esm/data/transforms/dimension-statistics.js.map +1 -1
  73. package/esm/event/event-dispatcher.d.ts +4 -1
  74. package/esm/event/event-dispatcher.js +2 -3
  75. package/esm/event/event-dispatcher.js.map +1 -1
  76. package/esm/event/event.d.ts +4 -1
  77. package/esm/event/event.js.map +1 -1
  78. package/esm/event/interface.d.ts +8 -2
  79. package/esm/event/interface.js.map +1 -1
  80. package/esm/interaction/zoom/zoomable.js +6 -1
  81. package/esm/interaction/zoom/zoomable.js.map +1 -1
  82. package/esm/typings/spec/common.d.ts +1 -1
  83. package/esm/typings/spec/common.js.map +1 -1
  84. package/package.json +11 -11
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/typings/spec/common.ts"],"names":[],"mappings":";;;AAkIA,IAAY,cAWX;AAXD,WAAY,cAAc;IACxB,qDAAqC,CAAA;IACrC,mDAAmC,CAAA;IACnC,+BAAe,CAAA;IACf,mCAAmB,CAAA;IACnB,qCAAqB,CAAA;IACrB,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,qCAAqB,CAAA;IACrB,qDAAqC,CAAA;IACrC,+BAAe,CAAA;AACjB,CAAC,EAXW,cAAc,GAAd,sBAAc,KAAd,sBAAc,QAWzB","file":"common.js","sourcesContent":["import type { IVChart } from './../../core/interface';\nimport type { IFillMarkSpec, IImageMarkSpec } from '../visual';\nimport type { LayoutCallBack } from '../../layout/interface';\nimport type { IElement, srIOption3DType } from '@visactor/vgrammar-core';\nimport type {\n DataSet,\n DataView,\n ISimplifyOptions,\n IFieldsOptions,\n IFilterOptions,\n IFoldOptions,\n IDsvParserOptions\n} from '@visactor/vdataset';\nimport type { RegionSpec } from '../../region/interface';\nimport type { IHoverSpec, ISelectSpec, IInteractionSpec } from '../../interaction/interface';\nimport type { IRenderOption } from '../../compile/interface';\nimport type { ISeriesTooltipSpec, ITooltipSpec } from '../../component/tooltip/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport type { ILayoutSpec } from '../../layout/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport type {\n ConvertToMarkStyleSpec,\n IArc3dMarkSpec,\n IArcMarkSpec,\n IAreaMarkSpec,\n IBoxPlotMarkSpec,\n ICommonSpec,\n IGroupMarkSpec,\n ILineMarkSpec,\n ILinkPathMarkSpec,\n IPathMarkSpec,\n IPolygonMarkSpec,\n IPyramid3dMarkSpec,\n IRect3dMarkSpec,\n IRectMarkSpec,\n IRuleMarkSpec,\n ISymbolMarkSpec,\n IRippleMarkSpec,\n ITextMarkSpec,\n IVisualSpecScale\n} from '../visual';\nimport type { StateValue } from '../../compile/mark/interface';\nimport type { ISeriesStyle, SeriesType } from '../../series/interface';\nimport type { Datum, StringOrNumber } from '../common';\nimport type { IInvalidType } from '../data';\nimport type { IAnimationSpec, IMorphSeriesSpec } from '../../animation/spec';\nimport type { IPlayer } from '../../component/player/interface';\nimport type { IMarkProgressiveConfig, MarkTypeEnum } from '../../mark/interface';\nimport type { IDataZoomSpec } from '../../component/data-zoom/data-zoom/interface';\nimport type { IScrollBarSpec } from '../../component/data-zoom/scroll-bar/interface';\nimport type { ICrosshairSpec } from '../../component/crosshair/interface';\nimport type { ITheme } from '../../theme/interface';\nimport type { ITitleSpec } from '../../component/title/interface';\nimport type { IBrushSpec } from '../../component/brush/interface';\nimport type { ITotalLabelSpec } from '../../component/label/interface';\nimport type { ILegendSpec } from '../../component/legend/interface';\nimport type { ILayoutOrientPadding, ILayoutPaddingSpec } from '../layout';\nimport type { IColor, ICustomPath2D, IRichTextCharacter } from '@visactor/vrender-core';\nimport type { ICommonAxisSpec } from '../../component/axis/interface';\nimport type { IMediaQuerySpec } from './media-query';\nimport type { IModelSpec } from '../../model/interface';\n\nexport type IChartPadding = ILayoutOrientPadding | number;\n\n/** chart option */\nexport interface IInitOption extends Omit<IRenderOption, 'pluginList'> {\n /**\n * **仅生效于浏览器环境。**\n * 图表挂载的父容器,可以直接指定容器 id,也可以传入 dom 对象\n */\n dom?: string | HTMLElement;\n /**\n * 除去选择 dom 属性进行挂载父容器,也可以使用 renderCanvas 属性直接传入 canvas 实例/ canvasId\n * 小程序/小组件环境请直接传入 id\n */\n renderCanvas?: string | HTMLCanvasElement;\n /** 数据集 */\n dataSet?: DataSet;\n /** 是否自适应容器大小 */\n autoFit?: boolean;\n /**\n * 性能测试钩子\n */\n performanceHook?: IPerformanceHook;\n /**\n * 是否开启动画\n */\n animation?: boolean;\n /**\n * 3d配置\n */\n options3d?: srIOption3DType;\n\n /**\n * 自定义布局函数\n */\n layout?: LayoutCallBack;\n\n /**\n * 当文本省略时,鼠标 hover 到文本上时是否显示 poptip\n * @default true\n */\n poptip?: boolean;\n\n /**\n * 报错的回调函数\n * @since 1.2.0\n */\n onError?: (...args: any[]) => void;\n\n /**\n * 默认主题(支持完整主题对象或者主题名称,主题名称需要提前在 `ThemeManager` 中注册)\n * @since 1.3.0\n */\n theme?: string | ITheme;\n\n /**\n * 是否关闭交互效果\n * @since 1.9.0\n * @default false\n */\n disableTriggerEvent?: boolean;\n /**\n * 当自动响应容器resize 事件时,触发resize 的间隔时长,单位毫秒\n * @since 1.12.5\n * @default 100\n */\n resizeDelay?: number;\n}\n\nexport enum RenderModeEnum {\n 'desktop-browser' = 'desktop-browser',\n 'mobile-browser' = 'mobile-browser',\n 'node' = 'node',\n 'worker' = 'worker',\n 'miniApp' = 'miniApp',\n 'wx' = 'wx',\n 'tt' = 'tt',\n 'harmony' = 'harmony',\n 'desktop-miniApp' = 'desktop-miniApp',\n 'lynx' = 'lynx'\n}\nexport type RenderMode = keyof typeof RenderModeEnum;\n\n/** chart spec */\nexport interface IChartSpec {\n /** 图表类型 */\n type: string;\n /** 数据 */\n data?: IData;\n /** 画布宽度 */\n width?: number;\n /** 画布高度 */\n height?: number;\n /**\n * 图表宽高是否自适应容器,浏览器环境下默认为 true。\n * 该配置的优先级高于构造函数中的 autoFit 配置。\n * 如果用户配置了 width,则以用户配置的 width 为准,height 同理。\n */\n autoFit?: boolean;\n /**\n * 图表整体 padding 设置\n */\n padding?: ILayoutPaddingSpec;\n /**\n * 图表色系配置\n */\n color?: string[] | Omit<IVisualSpecScale<unknown, string>, 'id'>;\n /**\n * 系列\n * @description 仅在组合图中使用, 文档中除组合图外均未透出该配置\n */\n series?: ISeriesSpec[];\n /**\n * 系列样式\n * @description 仅在图表配置了seriesField时生效\n */\n seriesStyle?: ISeriesStyle;\n\n /**\n * 自动关闭动画的阀值,对应的是单系列data的长度\n * @since 1.2.0\n */\n animationThreshold?: number;\n\n /** hover 交互 */\n hover?: boolean | IHoverSpec;\n /** select 交互 */\n select?: boolean | ISelectSpec;\n\n /** region配置 */\n region?: RegionSpec[];\n /** 图表标题配置 */\n title?: ITitleSpec;\n /** 布局配置 */\n layout?: ILayoutSpec;\n /** 图例配置 */\n legends?: ILegendSpec | ILegendSpec[];\n /** 十字辅助线配置 */\n crosshair?: ICrosshairSpec | ICrosshairSpec[];\n /** tooltip配置 */\n tooltip?: ITooltipSpec;\n /** 播放器配置 */\n player?: IPlayer;\n /** 缩略轴配置 */\n dataZoom?: IDataZoomSpec | IDataZoomSpec[];\n /** 滚动条配置 */\n scrollBar?: IScrollBarSpec | IScrollBarSpec[];\n /** 框选配置 */\n brush?: IBrushSpec;\n /** 全局 scale 配置 */\n scales?: IVisualSpecScale<unknown, unknown>[];\n /** 自定义mark */\n customMark?: ICustomMarkSpec<EnableMarkType>[];\n /** 轴 */\n axes?: ICommonAxisSpec[];\n /**\n * 图表上的主题定义。\n * 可以直接配置主题名,前提是该主题名已经注册\n */\n theme?: Omit<ITheme, 'name'> | string;\n /**\n * 图表背景色配置,优先级高于构造函数中的 background 配置\n * 自1.11.6版本支持渐变色对象的配置\n */\n background?: IBackgroundSpec;\n\n // TODO:后续开放,现在仍有问题\n // poptip?: PopTipAttributes;\n // TODO: 补充动画配置\n\n /**\n * 堆积时是否逆序\n * @default false\n * @since 1.4.0\n */\n stackInverse?: boolean;\n /**\n * 堆积时是否排序\n * @default false\n * @since 1.10.4\n */\n stackSort?: boolean;\n /**\n * 媒体查询配置\n * @since 1.8.0\n */\n media?: IMediaQuerySpec;\n}\n\nexport type IBackgroundSpec = IColor | ConvertToMarkStyleSpec<IGroupMarkSpec>;\n\n/** data */\nexport type IDataType = IDataValues | DataView;\nexport type IData = IDataType | IDataType[];\nexport type DataKeyType = string | string[] | ((data: Datum, index: number) => string);\nexport type BuildInTransformOptions =\n | {\n /** 地理数据简化 */\n type: 'simplify';\n options: ISimplifyOptions;\n }\n | {\n /** 数据维度处理,包括排序,逆序,数据筛选能力 */\n type: 'fields';\n options: IFieldsOptions;\n }\n | {\n /** 使用回调的自定义筛选 */\n type: 'filter';\n options: IFilterOptions;\n }\n | {\n /** 数据展开 */\n type: 'fold';\n options: IFoldOptions;\n };\n\nexport interface IFieldsMeta {\n /** TODO: 字段通用format, 暂时先不支持 */\n // format?: (datum: Datum, index: number) => unknown;\n /** 字段别名 */\n alias?: string;\n /** 字段取值范围 */\n domain?: StringOrNumber[];\n /** 是否使用 domain 锁定统计信息。默认为 false */\n lockStatisticsByDomain?: boolean;\n /** 连续型 还是 离散型 */\n type?: 'ordinal' | 'linear';\n /** 排序顺序 不设置的话当前维度不进行排序 */\n sortIndex?: number;\n /** 排序时是否反转 默认为 false */\n sortReverse?: boolean;\n}\n\nexport interface SheetParseOptions extends CommonParseOptions {\n /**\n * 特定类型的数据,支持以下类型:\n * - csv: 逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。\n * - dsv: 分隔值(Delimiter-Separated Values,DSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。\n * - tsv: 制表符分隔值(Tab-Separated Values,TSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。\n */\n type: 'csv' | 'dsv' | 'tsv';\n /**\n * 具体的解析配置\n */\n options?: IDsvParserOptions;\n}\n\nexport interface CommonParseOptions {\n /**\n * 是否需要对数据进行 clone,默认为 true。\n * 如果考虑性能,你可以将其关闭,但是这会带了一些副作用,即我们会对传入的数据进行修改(不会对原有字段及值修改,只会在原有数据基础上添加一些字段)。\n * @default true\n * @since 1.3.0\n */\n clone?: boolean;\n}\n\nexport interface IDataValues {\n /**\n * 数据唯一标识\n */\n id?: StringOrNumber;\n /**\n * 数据\n */\n values: Datum[] | string;\n /**\n * 引用的数据索引\n */\n fromDataIndex?: number;\n /**\n * 引用的数据 id\n */\n fromDataId?: StringOrNumber;\n /**\n * 数据 transform 配置\n */\n transforms?: BuildInTransformOptions[];\n /**\n * 数据字段相关配置\n */\n fields?: Record<\n /** 字段key */\n string,\n IFieldsMeta\n >;\n /**\n * 数据解析器配置\n */\n parser?: SheetParseOptions | CommonParseOptions;\n}\n\nexport type IHierarchyNodeData = {\n value?: number;\n children?: IHierarchyNodeData[];\n} & Datum;\n\nexport interface IHierarchyDataValues extends Omit<IDataValues, 'values'> {\n values: IHierarchyNodeData;\n}\n\nexport type IHierarchyData = DataView | IHierarchyDataValues;\n\n/** series */\nexport interface ISeriesSpec extends IInteractionSpec {\n /** 系列类型 */\n type: SeriesType;\n\n /** 系列名称 */\n name?: string;\n\n /** 用户自定义的 series id */\n id?: StringOrNumber;\n /**\n * 系列数据\n * @description 系列可以配置自身的数据,也可以从chart.data中获取数据\n */\n data?: IDataType;\n /**\n * 系列关联的数据索引\n * @default 0\n */\n dataIndex?: number;\n /**\n * 系列关联的数据id\n */\n dataId?: StringOrNumber;\n /**\n * dataKey用于绑定数据与Mark的关系, 该配置在动画中非常重要.\n */\n dataKey?: DataKeyType;\n\n /**\n * 系列关联的region索引\n * @default 0\n */\n regionIndex?: number;\n /** 系列关联的region id */\n regionId?: StringOrNumber;\n /**\n * 分组字段\n */\n seriesField?: string;\n /**\n * 系列样式\n * @description 仅在图表配置了seriesField时生效\n */\n seriesStyle?: ISeriesStyle;\n\n /** 是否对数据进行堆叠处理 */\n stack?: boolean;\n\n /**\n * 堆叠时的分组值\n * stackValue 相等的系列将在一起堆积。没有配置的系列将在一组\n * @since 1.4.0\n */\n stackValue?: StringOrNumber;\n\n /** 堆叠汇总标签\n * @since 1.3.0\n */\n totalLabel?: ITotalLabelSpec;\n\n /** 是否对数据进行百分比处理 */\n percent?: boolean;\n\n /** 是否围绕中心轴偏移轮廓 */\n stackOffsetSilhouette?: boolean;\n\n /**\n * 非合规数据点连接方式\n * @description null,undefined等非法数据点连接方式。\n * @default 'break'\n * 'break'指在该数据点处断开\n * 'link' 指忽略该点保持连续\n * 'zero' 指该点默认数值为0\n * 'ignore' 指不处理\n */\n invalidType?: IInvalidType;\n\n /** 系列对应的提示信息设置,优先级高于图表的tooltip配置 */\n tooltip?: ISeriesTooltipSpec;\n\n /**\n * 是否开启系列动画\n */\n animation?: boolean;\n /**\n * 自动关闭动画的阀值,对应的是单系列data的长度\n * @since 1.2.0\n */\n animationThreshold?: number;\n\n /**\n * 是否支持3d视角\n */\n support3d?: boolean;\n /**\n * morph 动画配置\n */\n morph?: IMorphSeriesSpec;\n\n /**\n * 系列的扩展mark,能够获取系列上的数据\n */\n extensionMark?: (IExtensionMarkSpec<Exclude<EnableMarkType, 'group'>> | IExtensionGroupMarkSpec)[];\n\n /**\n * 今当通过`series`配置的时候,才会生效\n */\n zIndex?: number;\n\n /**\n * series background\n * 作用是支持系列的图形对系列背景进行 mask,或者切分等效果。不是作为背景图\n * 暂时不开放api,避免出现break change\n */\n // background?: IBackgroundSpec;\n}\n\nexport type IChartExtendsSeriesSpec<T extends ISeriesSpec> = Omit<T, 'data' | 'morph' | 'stackValue' | 'tooltip'>;\n\nexport type AdaptiveSpec<T, K extends keyof any> = {\n [key in Exclude<keyof T, K>]: T[key];\n} & { [key in K]: any };\n\nexport interface IMarkStateFullSpec<T> extends Record<string, IMarkStateSpec<T> | IMarkStateStyleSpec<T>> {\n /**\n * 正常状态下图元的样式设置\n */\n normal?: IMarkStateSpec<T> | IMarkStateStyleSpec<T>;\n /**\n * hover状态下图元的样式设置\n */\n hover?: IMarkStateSpec<T> | IMarkStateStyleSpec<T>;\n /**\n * 没有被hover的状态下图元的样式设置\n */\n hover_reverse?: IMarkStateSpec<T> | IMarkStateStyleSpec<T>;\n /**\n * 选中状态下图元的样式设置\n */\n selected?: IMarkStateSpec<T> | IMarkStateStyleSpec<T>;\n /**\n * 没有被选中的状态下图元的样式设置\n */\n selected_reverse?: IMarkStateSpec<T> | IMarkStateStyleSpec<T>;\n}\n\n/** markSpec */\nexport type IMarkSpec<T extends ICommonSpec = ICommonSpec> = {\n /**\n * 用户id\n */\n id?: StringOrNumber;\n /**\n * 是否响应交互\n */\n interactive?: boolean;\n // /**\n // * 是否会被region区域裁减\n // * @todo 暂未支持\n // */\n // clip?: boolean;\n /**\n * 与其他mark元素的层级\n */\n zIndex?: number;\n /**\n * mark 层 是否显示配置\n */\n visible?: boolean;\n /** 默认样式设置 */\n style?: ConvertToMarkStyleSpec<T>;\n /** 不同状态下的样式配置 */\n state?: IMarkStateFullSpec<T>;\n /**\n * 状态排序方法,默认状态都是按照添加的顺序处理的,如果有特殊的需求,需要指定状态顺序,可以通过这个方法实现\n * @since 1.9.0\n */\n stateSort?: (stateA: string, stateB: string) => number;\n\n /*\n * 是否是3d视角的mark\n */\n support3d?: boolean;\n /* customized shape of mark */\n customShape?: (datum: any[], attrs: any, path: ICustomPath2D) => ICustomPath2D;\n} & IMarkProgressiveConfig;\n\nexport type IMarkStateFilter =\n | {\n /** 维度筛选 */\n fields: { [key in string]: { type: 'ordinal' | 'linear'; domain: StringOrNumber[] } };\n }\n | {\n /** 筛选数据 */\n datums: Datum[];\n /** 筛选数据 */\n datumKeys: string[];\n }\n | {\n /** 筛选 item */\n items: IElement[];\n }\n /** 筛选函数 */\n | ((datum: Datum, options: Record<string, any>) => boolean);\n\nexport interface IMarkStateSpec<T> {\n /** 筛选器 */\n filter?: IMarkStateFilter;\n /** 状态优先级 */\n level?: number | undefined;\n style: ConvertToMarkStyleSpec<T>;\n}\n\nexport type IMarkStateStyleSpec<T> = ConvertToMarkStyleSpec<T>;\n\nexport interface IMarkStateTheme<T> extends Record<string, T> {\n /**\n * 图元在正常状态下的主题样式设置\n */\n normal?: T;\n /**\n * 图元在 hover 状态下的主题样式设置\n */\n hover?: T;\n /**\n * 图元在 未被hover 状态下的主题样式设置\n */\n hover_reverse?: T;\n /**\n * 图元在 选中状态下的主题样式设置\n */\n selected?: T;\n /**\n * 图元在 未被选中 状态下的主题样式设置\n */\n selected_reverse?: T;\n}\n\nexport type IMarkTheme<T> = {\n /**\n * mark 层 是否显示配置\n */\n visible?: boolean;\n /** 默认样式设置 */\n style?: T;\n /** 不同状态下的样式配置 */\n state?: IMarkStateTheme<T>;\n /**\n * 可交互的开关\n */\n interactive?: boolean;\n};\n\nexport interface IPerformanceHook {\n // constructor\n // 创建完成。在使用 vstory 的场景下,图表实例不由业务创建,业务想要获取图表时机非常靠后,因此补充一个钩子\n afterCreateVChart?: (vchart?: IVChart) => void;\n\n // InitRender\n // ├── InitializeChart\n // ├── CompileToVGrammar\n // ├── ParseView\n // | └── ParseExpression\n // ├── (new View)\n // | ├── CreateRuntime\n // | └── (view.initialize)\n // | └── CreateVRenderStage\n // └── SrViewEvaluateAsync / SrViewRunAsync\n // ├── MarkTransform\n // ├── FacetTransform\n // ├── CreateVRenderMark\n // └── VRenderDraw\n\n // 初始化图表配置\n beforeInitializeChart?: (vchart?: IVChart) => void;\n afterInitializeChart?: (vchart?: IVChart) => void;\n\n // 编译\n beforeCompileToVGrammar?: () => void;\n afterCompileToVGrammar?: () => void;\n // 各个图表模块编译\n beforeRegionCompile?: () => void;\n afterRegionCompile?: () => void;\n beforeSeriesCompile?: () => void;\n afterSeriesCompile?: () => void;\n beforeComponentCompile?: () => void;\n afterComponentCompile?: () => void;\n\n // resize的时候的钩子\n beforeResizeWithUpdate?: () => void;\n afterResizeWithUpdate?: () => void;\n\n // LayoutWithSceneGraph 二次布局\n beforeLayoutWithSceneGraph?: () => void;\n afterLayoutWithSceneGraph?: () => void;\n\n // VGrammar 解析spec\n beforeParseView?: () => void;\n afterParseView?: () => void;\n\n // 初始化runtime\n beforeCreateRuntime?: () => void;\n afterCreateRuntime?: () => void;\n\n // VGrammar EvaluateAsync 时间\n beforeSrViewEvaluateAsync?: () => void;\n afterSrViewEvaluateAsync?: () => void;\n\n // VGrammar RunAsync 时间\n beforeSrViewRunAsync?: () => void;\n afterSrViewRunAsync?: () => void;\n\n // transform测量\n beforeTransform?: (name: string) => void;\n afterTransform?: (name: string) => void;\n\n // Create VRender Stage 时间\n beforeCreateVRenderStage?: () => void;\n afterCreateVRenderStage?: () => void;\n\n // Create VRender Mark 时间\n beforeCreateVRenderMark?: () => void;\n afterCreateVRenderMark?: () => void;\n\n // VGrammar 创建元素完成,vrender 绘图之前\n beforeDoRender?: (vchart?: IVChart) => void;\n\n // VRender Draw 时间\n beforeVRenderDraw?: () => void;\n afterVRenderDraw?: () => void;\n}\n\nexport type IBuildinMarkSpec = {\n group: IGroupMarkSpec;\n symbol: ISymbolMarkSpec;\n rule: IRuleMarkSpec;\n line: ILineMarkSpec;\n text: ITextMarkSpec;\n rect: IRectMarkSpec;\n rect3d: IRect3dMarkSpec;\n image: IImageMarkSpec;\n path: IPathMarkSpec;\n area: IAreaMarkSpec;\n arc: IArcMarkSpec;\n arc3d: IArc3dMarkSpec;\n polygon: IPolygonMarkSpec;\n pyramid3d: IPyramid3dMarkSpec;\n boxPlot: IBoxPlotMarkSpec;\n linkPath: ILinkPathMarkSpec;\n ripple: IRippleMarkSpec;\n};\n\nexport type EnableMarkType = keyof IBuildinMarkSpec;\nexport interface ICustomMarkSpec<T extends EnableMarkType>\n extends IModelSpec,\n IMarkSpec<IBuildinMarkSpec[T]>,\n IAnimationSpec<string, string> {\n type: T;\n /**\n * mark对应的名称,主要用于事件过滤如: { markName: 'yourName' }\n * @since 1.12.5\n */\n name?: string;\n /**\n * 关联的数据索引\n * @default 与系列使用同一份数据\n */\n dataIndex?: number;\n /**\n * dataKey用于绑定数据与Mark的关系\n * 如果数据和系列数据一致,可以不配置,默认会读取系列中的配置\n *\n * @support since 1.9.5\n */\n dataKey?: string | ((datum: any) => string);\n /**\n * 关联的数据id\n */\n dataId?: StringOrNumber;\n /**\n * specify the component type\n * @support since 1.9.0\n */\n componentType?: string;\n /**\n * enable animation of custom-mark or not\n * @since 1.11.0\n */\n animation?: boolean;\n /**\n * 指定 parent Id\n * @since 1.13.0\n */\n parent?: string;\n}\nexport interface ICustomMarkGroupSpec extends ICustomMarkSpec<MarkTypeEnum.group> {\n children?: ICustomMarkSpec<EnableMarkType>[];\n}\n\nexport interface IExtensionMarkSpec<T extends Exclude<EnableMarkType, 'group'>> extends ICustomMarkSpec<T> {\n /**\n * 关联的数据索引\n * @default 与系列使用同一份数据\n */\n dataIndex?: number;\n /**\n * dataKey用于绑定数据与Mark的关系\n * 如果数据和系列数据一致,可以不配置,默认会读取系列中的配置\n *\n * @support since 1.9.5\n */\n dataKey?: string | ((datum: any) => string);\n /**\n * 关联的数据id\n */\n dataId?: StringOrNumber;\n /**\n * specify the component type\n * @support since 1.9.0\n */\n componentType?: string;\n}\n\nexport interface IExtensionGroupMarkSpec extends ICustomMarkSpec<MarkTypeEnum.group> {\n /**\n * 支持子节点\n */\n children?: ICustomMarkSpec<EnableMarkType>[];\n}\n\n/** 纯文本类型的 formatMethod */\nexport type ITextFormatMethod<T extends any[]> = (\n ...args: T\n) => ITextMarkSpec['text'] | { type: 'text'; text: ITextMarkSpec['text'] };\n\nexport type IRichTextFormatMethod<T extends any[]> = (...args: T) =>\n | {\n /**\n * 设置文本类型为富文本\n */\n type: 'rich';\n /**\n * 当文本类型为富文本的时候,设置文本的内容\n */\n text: IRichTextCharacter[];\n }\n | IRichTextCharacter[];\n\n/**\n * 常规 text.formatMethod 支持返回文字字符串,或统一的对象配置\n * (这里特指由 vgrammar 代理的 text 图元)\n */\nexport type IFormatMethod<T extends any[]> = (\n ...args: T\n) => ReturnType<ITextFormatMethod<T>> | ReturnType<IRichTextFormatMethod<T>>;\n"]}
1
+ {"version":3,"sources":["../src/typings/spec/common.ts"],"names":[],"mappings":";;;AAkIA,IAAY,cAWX;AAXD,WAAY,cAAc;IACxB,qDAAqC,CAAA;IACrC,mDAAmC,CAAA;IACnC,+BAAe,CAAA;IACf,mCAAmB,CAAA;IACnB,qCAAqB,CAAA;IACrB,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,qCAAqB,CAAA;IACrB,qDAAqC,CAAA;IACrC,+BAAe,CAAA;AACjB,CAAC,EAXW,cAAc,GAAd,sBAAc,KAAd,sBAAc,QAWzB","file":"common.js","sourcesContent":["import type { IVChart } from './../../core/interface';\nimport type { IFillMarkSpec, IImageMarkSpec } from '../visual';\nimport type { LayoutCallBack } from '../../layout/interface';\nimport type { IElement, srIOption3DType } from '@visactor/vgrammar-core';\nimport type {\n DataSet,\n DataView,\n ISimplifyOptions,\n IFieldsOptions,\n IFilterOptions,\n IFoldOptions,\n IDsvParserOptions\n} from '@visactor/vdataset';\nimport type { RegionSpec } from '../../region/interface';\nimport type { IHoverSpec, ISelectSpec, IInteractionSpec } from '../../interaction/interface';\nimport type { IRenderOption } from '../../compile/interface';\nimport type { ISeriesTooltipSpec, ITooltipSpec } from '../../component/tooltip/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport type { ILayoutSpec } from '../../layout/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport type {\n ConvertToMarkStyleSpec,\n IArc3dMarkSpec,\n IArcMarkSpec,\n IAreaMarkSpec,\n IBoxPlotMarkSpec,\n ICommonSpec,\n IGroupMarkSpec,\n ILineMarkSpec,\n ILinkPathMarkSpec,\n IPathMarkSpec,\n IPolygonMarkSpec,\n IPyramid3dMarkSpec,\n IRect3dMarkSpec,\n IRectMarkSpec,\n IRuleMarkSpec,\n ISymbolMarkSpec,\n IRippleMarkSpec,\n ITextMarkSpec,\n IVisualSpecScale\n} from '../visual';\nimport type { StateValue } from '../../compile/mark/interface';\nimport type { ISeriesStyle, SeriesType } from '../../series/interface';\nimport type { Datum, StringOrNumber } from '../common';\nimport type { IInvalidType } from '../data';\nimport type { IAnimationSpec, IMorphSeriesSpec } from '../../animation/spec';\nimport type { IPlayer } from '../../component/player/interface';\nimport type { IMarkProgressiveConfig, MarkTypeEnum } from '../../mark/interface';\nimport type { IDataZoomSpec } from '../../component/data-zoom/data-zoom/interface';\nimport type { IScrollBarSpec } from '../../component/data-zoom/scroll-bar/interface';\nimport type { ICrosshairSpec } from '../../component/crosshair/interface';\nimport type { ITheme } from '../../theme/interface';\nimport type { ITitleSpec } from '../../component/title/interface';\nimport type { IBrushSpec } from '../../component/brush/interface';\nimport type { ITotalLabelSpec } from '../../component/label/interface';\nimport type { ILegendSpec } from '../../component/legend/interface';\nimport type { ILayoutOrientPadding, ILayoutPaddingSpec } from '../layout';\nimport type { IColor, ICustomPath2D, IRichTextCharacter } from '@visactor/vrender-core';\nimport type { ICommonAxisSpec } from '../../component/axis/interface';\nimport type { IMediaQuerySpec } from './media-query';\nimport type { IModelSpec } from '../../model/interface';\n\nexport type IChartPadding = ILayoutOrientPadding | number;\n\n/** chart option */\nexport interface IInitOption extends Omit<IRenderOption, 'pluginList'> {\n /**\n * **仅生效于浏览器环境。**\n * 图表挂载的父容器,可以直接指定容器 id,也可以传入 dom 对象\n */\n dom?: string | HTMLElement;\n /**\n * 除去选择 dom 属性进行挂载父容器,也可以使用 renderCanvas 属性直接传入 canvas 实例/ canvasId\n * 小程序/小组件环境请直接传入 id\n */\n renderCanvas?: string | HTMLCanvasElement;\n /** 数据集 */\n dataSet?: DataSet;\n /** 是否自适应容器大小 */\n autoFit?: boolean;\n /**\n * 性能测试钩子\n */\n performanceHook?: IPerformanceHook;\n /**\n * 是否开启动画\n */\n animation?: boolean;\n /**\n * 3d配置\n */\n options3d?: srIOption3DType;\n\n /**\n * 自定义布局函数\n */\n layout?: LayoutCallBack;\n\n /**\n * 当文本省略时,鼠标 hover 到文本上时是否显示 poptip\n * @default true\n */\n poptip?: boolean;\n\n /**\n * 报错的回调函数\n * @since 1.2.0\n */\n onError?: (...args: any[]) => void;\n\n /**\n * 默认主题(支持完整主题对象或者主题名称,主题名称需要提前在 `ThemeManager` 中注册)\n * @since 1.3.0\n */\n theme?: string | ITheme;\n\n /**\n * 是否关闭交互效果\n * @since 1.9.0\n * @default false\n */\n disableTriggerEvent?: boolean;\n /**\n * 当自动响应容器resize 事件时,触发resize 的间隔时长,单位毫秒\n * @since 1.12.5\n * @default 100\n */\n resizeDelay?: number;\n}\n\nexport enum RenderModeEnum {\n 'desktop-browser' = 'desktop-browser',\n 'mobile-browser' = 'mobile-browser',\n 'node' = 'node',\n 'worker' = 'worker',\n 'miniApp' = 'miniApp',\n 'wx' = 'wx',\n 'tt' = 'tt',\n 'harmony' = 'harmony',\n 'desktop-miniApp' = 'desktop-miniApp',\n 'lynx' = 'lynx'\n}\nexport type RenderMode = keyof typeof RenderModeEnum;\n\n/** chart spec */\nexport interface IChartSpec {\n /** 图表类型 */\n type: string;\n /** 数据 */\n data?: IData;\n /** 画布宽度 */\n width?: number;\n /** 画布高度 */\n height?: number;\n /**\n * 图表宽高是否自适应容器,浏览器环境下默认为 true。\n * 该配置的优先级高于构造函数中的 autoFit 配置。\n * 如果用户配置了 width,则以用户配置的 width 为准,height 同理。\n */\n autoFit?: boolean;\n /**\n * 图表整体 padding 设置\n */\n padding?: ILayoutPaddingSpec;\n /**\n * 图表色系配置\n */\n color?: string[] | Omit<IVisualSpecScale<unknown, string>, 'id'>;\n /**\n * 系列\n * @description 仅在组合图中使用, 文档中除组合图外均未透出该配置\n */\n series?: ISeriesSpec[];\n /**\n * 系列样式\n * @description 仅在图表配置了seriesField时生效\n */\n seriesStyle?: ISeriesStyle;\n\n /**\n * 自动关闭动画的阀值,对应的是单系列data的长度\n * @since 1.2.0\n */\n animationThreshold?: number;\n\n /** hover 交互 */\n hover?: boolean | IHoverSpec;\n /** select 交互 */\n select?: boolean | ISelectSpec;\n\n /** region配置 */\n region?: RegionSpec[];\n /** 图表标题配置 */\n title?: ITitleSpec;\n /** 布局配置 */\n layout?: ILayoutSpec;\n /** 图例配置 */\n legends?: ILegendSpec | ILegendSpec[];\n /** 十字辅助线配置 */\n crosshair?: ICrosshairSpec | ICrosshairSpec[];\n /** tooltip配置 */\n tooltip?: ITooltipSpec;\n /** 播放器配置 */\n player?: IPlayer;\n /** 缩略轴配置 */\n dataZoom?: IDataZoomSpec | IDataZoomSpec[];\n /** 滚动条配置 */\n scrollBar?: IScrollBarSpec | IScrollBarSpec[];\n /** 框选配置 */\n brush?: IBrushSpec;\n /** 全局 scale 配置 */\n scales?: IVisualSpecScale<unknown, unknown>[];\n /** 自定义mark */\n customMark?: ICustomMarkSpec<EnableMarkType>[];\n /** 轴 */\n axes?: ICommonAxisSpec[];\n /**\n * 图表上的主题定义。\n * 可以直接配置主题名,前提是该主题名已经注册\n */\n theme?: Omit<ITheme, 'name'> | string;\n /**\n * 图表背景色配置,优先级高于构造函数中的 background 配置\n * 自1.11.6版本支持渐变色对象的配置\n */\n background?: IBackgroundSpec;\n\n // TODO:后续开放,现在仍有问题\n // poptip?: PopTipAttributes;\n // TODO: 补充动画配置\n\n /**\n * 堆积时是否逆序\n * @default false\n * @since 1.4.0\n */\n stackInverse?: boolean;\n /**\n * 堆积时是否排序\n * @default false\n * @since 1.10.4\n */\n stackSort?: boolean;\n /**\n * 媒体查询配置\n * @since 1.8.0\n */\n media?: IMediaQuerySpec;\n}\n\nexport type IBackgroundSpec = IColor | ConvertToMarkStyleSpec<IGroupMarkSpec>;\n\n/** data */\nexport type IDataType = IDataValues | DataView;\nexport type IData = IDataType | IDataType[];\nexport type DataKeyType = string | string[] | ((data: Datum, index: number) => string);\nexport type BuildInTransformOptions =\n | {\n /** 地理数据简化 */\n type: 'simplify';\n options: ISimplifyOptions;\n }\n | {\n /** 数据维度处理,包括排序,逆序,数据筛选能力 */\n type: 'fields';\n options: IFieldsOptions;\n }\n | {\n /** 使用回调的自定义筛选 */\n type: 'filter';\n options: IFilterOptions;\n }\n | {\n /** 数据展开 */\n type: 'fold';\n options: IFoldOptions;\n };\n\nexport interface IFieldsMeta {\n /** TODO: 字段通用format, 暂时先不支持 */\n // format?: (datum: Datum, index: number) => unknown;\n /**\n * 字段别名\n */\n alias?: string;\n /** 字段取值范围 */\n domain?: StringOrNumber[];\n /**\n * 是否使用 domain 锁定统计信息。默认为 false\n * true - 在图例交互场景,也固定domain\n * 当设置为 `onlyFull` 时,仅在初始化的展示完整数据的场景锁定domain,在交互触发的筛选场景不锁定\n */\n lockStatisticsByDomain?: boolean | 'onlyFull';\n /** 连续型 还是 离散型 */\n type?: 'ordinal' | 'linear';\n /** 排序顺序 不设置的话当前维度不进行排序 */\n sortIndex?: number;\n /** 排序时是否反转 默认为 false */\n sortReverse?: boolean;\n}\n\nexport interface SheetParseOptions extends CommonParseOptions {\n /**\n * 特定类型的数据,支持以下类型:\n * - csv: 逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。\n * - dsv: 分隔值(Delimiter-Separated Values,DSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。\n * - tsv: 制表符分隔值(Tab-Separated Values,TSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。\n */\n type: 'csv' | 'dsv' | 'tsv';\n /**\n * 具体的解析配置\n */\n options?: IDsvParserOptions;\n}\n\nexport interface CommonParseOptions {\n /**\n * 是否需要对数据进行 clone,默认为 true。\n * 如果考虑性能,你可以将其关闭,但是这会带了一些副作用,即我们会对传入的数据进行修改(不会对原有字段及值修改,只会在原有数据基础上添加一些字段)。\n * @default true\n * @since 1.3.0\n */\n clone?: boolean;\n}\n\nexport interface IDataValues {\n /**\n * 数据唯一标识\n */\n id?: StringOrNumber;\n /**\n * 数据\n */\n values: Datum[] | string;\n /**\n * 引用的数据索引\n */\n fromDataIndex?: number;\n /**\n * 引用的数据 id\n */\n fromDataId?: StringOrNumber;\n /**\n * 数据 transform 配置\n */\n transforms?: BuildInTransformOptions[];\n /**\n * 数据字段相关配置\n */\n fields?: Record<\n /** 字段key */\n string,\n IFieldsMeta\n >;\n /**\n * 数据解析器配置\n */\n parser?: SheetParseOptions | CommonParseOptions;\n}\n\nexport type IHierarchyNodeData = {\n value?: number;\n children?: IHierarchyNodeData[];\n} & Datum;\n\nexport interface IHierarchyDataValues extends Omit<IDataValues, 'values'> {\n values: IHierarchyNodeData;\n}\n\nexport type IHierarchyData = DataView | IHierarchyDataValues;\n\n/** series */\nexport interface ISeriesSpec extends IInteractionSpec {\n /** 系列类型 */\n type: SeriesType;\n\n /** 系列名称 */\n name?: string;\n\n /** 用户自定义的 series id */\n id?: StringOrNumber;\n /**\n * 系列数据\n * @description 系列可以配置自身的数据,也可以从chart.data中获取数据\n */\n data?: IDataType;\n /**\n * 系列关联的数据索引\n * @default 0\n */\n dataIndex?: number;\n /**\n * 系列关联的数据id\n */\n dataId?: StringOrNumber;\n /**\n * dataKey用于绑定数据与Mark的关系, 该配置在动画中非常重要.\n */\n dataKey?: DataKeyType;\n\n /**\n * 系列关联的region索引\n * @default 0\n */\n regionIndex?: number;\n /** 系列关联的region id */\n regionId?: StringOrNumber;\n /**\n * 分组字段\n */\n seriesField?: string;\n /**\n * 系列样式\n * @description 仅在图表配置了seriesField时生效\n */\n seriesStyle?: ISeriesStyle;\n\n /** 是否对数据进行堆叠处理 */\n stack?: boolean;\n\n /**\n * 堆叠时的分组值\n * stackValue 相等的系列将在一起堆积。没有配置的系列将在一组\n * @since 1.4.0\n */\n stackValue?: StringOrNumber;\n\n /** 堆叠汇总标签\n * @since 1.3.0\n */\n totalLabel?: ITotalLabelSpec;\n\n /** 是否对数据进行百分比处理 */\n percent?: boolean;\n\n /** 是否围绕中心轴偏移轮廓 */\n stackOffsetSilhouette?: boolean;\n\n /**\n * 非合规数据点连接方式\n * @description null,undefined等非法数据点连接方式。\n * @default 'break'\n * 'break'指在该数据点处断开\n * 'link' 指忽略该点保持连续\n * 'zero' 指该点默认数值为0\n * 'ignore' 指不处理\n */\n invalidType?: IInvalidType;\n\n /** 系列对应的提示信息设置,优先级高于图表的tooltip配置 */\n tooltip?: ISeriesTooltipSpec;\n\n /**\n * 是否开启系列动画\n */\n animation?: boolean;\n /**\n * 自动关闭动画的阀值,对应的是单系列data的长度\n * @since 1.2.0\n */\n animationThreshold?: number;\n\n /**\n * 是否支持3d视角\n */\n support3d?: boolean;\n /**\n * morph 动画配置\n */\n morph?: IMorphSeriesSpec;\n\n /**\n * 系列的扩展mark,能够获取系列上的数据\n */\n extensionMark?: (IExtensionMarkSpec<Exclude<EnableMarkType, 'group'>> | IExtensionGroupMarkSpec)[];\n\n /**\n * 今当通过`series`配置的时候,才会生效\n */\n zIndex?: number;\n\n /**\n * series background\n * 作用是支持系列的图形对系列背景进行 mask,或者切分等效果。不是作为背景图\n * 暂时不开放api,避免出现break change\n */\n // background?: IBackgroundSpec;\n}\n\nexport type IChartExtendsSeriesSpec<T extends ISeriesSpec> = Omit<T, 'data' | 'morph' | 'stackValue' | 'tooltip'>;\n\nexport type AdaptiveSpec<T, K extends keyof any> = {\n [key in Exclude<keyof T, K>]: T[key];\n} & { [key in K]: any };\n\nexport interface IMarkStateFullSpec<T> extends Record<string, IMarkStateSpec<T> | IMarkStateStyleSpec<T>> {\n /**\n * 正常状态下图元的样式设置\n */\n normal?: IMarkStateSpec<T> | IMarkStateStyleSpec<T>;\n /**\n * hover状态下图元的样式设置\n */\n hover?: IMarkStateSpec<T> | IMarkStateStyleSpec<T>;\n /**\n * 没有被hover的状态下图元的样式设置\n */\n hover_reverse?: IMarkStateSpec<T> | IMarkStateStyleSpec<T>;\n /**\n * 选中状态下图元的样式设置\n */\n selected?: IMarkStateSpec<T> | IMarkStateStyleSpec<T>;\n /**\n * 没有被选中的状态下图元的样式设置\n */\n selected_reverse?: IMarkStateSpec<T> | IMarkStateStyleSpec<T>;\n}\n\n/** markSpec */\nexport type IMarkSpec<T extends ICommonSpec = ICommonSpec> = {\n /**\n * 用户id\n */\n id?: StringOrNumber;\n /**\n * 是否响应交互\n */\n interactive?: boolean;\n // /**\n // * 是否会被region区域裁减\n // * @todo 暂未支持\n // */\n // clip?: boolean;\n /**\n * 与其他mark元素的层级\n */\n zIndex?: number;\n /**\n * mark 层 是否显示配置\n */\n visible?: boolean;\n /** 默认样式设置 */\n style?: ConvertToMarkStyleSpec<T>;\n /** 不同状态下的样式配置 */\n state?: IMarkStateFullSpec<T>;\n /**\n * 状态排序方法,默认状态都是按照添加的顺序处理的,如果有特殊的需求,需要指定状态顺序,可以通过这个方法实现\n * @since 1.9.0\n */\n stateSort?: (stateA: string, stateB: string) => number;\n\n /*\n * 是否是3d视角的mark\n */\n support3d?: boolean;\n /* customized shape of mark */\n customShape?: (datum: any[], attrs: any, path: ICustomPath2D) => ICustomPath2D;\n} & IMarkProgressiveConfig;\n\nexport type IMarkStateFilter =\n | {\n /** 维度筛选 */\n fields: { [key in string]: { type: 'ordinal' | 'linear'; domain: StringOrNumber[] } };\n }\n | {\n /** 筛选数据 */\n datums: Datum[];\n /** 筛选数据 */\n datumKeys: string[];\n }\n | {\n /** 筛选 item */\n items: IElement[];\n }\n /** 筛选函数 */\n | ((datum: Datum, options: Record<string, any>) => boolean);\n\nexport interface IMarkStateSpec<T> {\n /** 筛选器 */\n filter?: IMarkStateFilter;\n /** 状态优先级 */\n level?: number | undefined;\n style: ConvertToMarkStyleSpec<T>;\n}\n\nexport type IMarkStateStyleSpec<T> = ConvertToMarkStyleSpec<T>;\n\nexport interface IMarkStateTheme<T> extends Record<string, T> {\n /**\n * 图元在正常状态下的主题样式设置\n */\n normal?: T;\n /**\n * 图元在 hover 状态下的主题样式设置\n */\n hover?: T;\n /**\n * 图元在 未被hover 状态下的主题样式设置\n */\n hover_reverse?: T;\n /**\n * 图元在 选中状态下的主题样式设置\n */\n selected?: T;\n /**\n * 图元在 未被选中 状态下的主题样式设置\n */\n selected_reverse?: T;\n}\n\nexport type IMarkTheme<T> = {\n /**\n * mark 层 是否显示配置\n */\n visible?: boolean;\n /** 默认样式设置 */\n style?: T;\n /** 不同状态下的样式配置 */\n state?: IMarkStateTheme<T>;\n /**\n * 可交互的开关\n */\n interactive?: boolean;\n};\n\nexport interface IPerformanceHook {\n // constructor\n // 创建完成。在使用 vstory 的场景下,图表实例不由业务创建,业务想要获取图表时机非常靠后,因此补充一个钩子\n afterCreateVChart?: (vchart?: IVChart) => void;\n\n // InitRender\n // ├── InitializeChart\n // ├── CompileToVGrammar\n // ├── ParseView\n // | └── ParseExpression\n // ├── (new View)\n // | ├── CreateRuntime\n // | └── (view.initialize)\n // | └── CreateVRenderStage\n // └── SrViewEvaluateAsync / SrViewRunAsync\n // ├── MarkTransform\n // ├── FacetTransform\n // ├── CreateVRenderMark\n // └── VRenderDraw\n\n // 初始化图表配置\n beforeInitializeChart?: (vchart?: IVChart) => void;\n afterInitializeChart?: (vchart?: IVChart) => void;\n\n // 编译\n beforeCompileToVGrammar?: () => void;\n afterCompileToVGrammar?: () => void;\n // 各个图表模块编译\n beforeRegionCompile?: () => void;\n afterRegionCompile?: () => void;\n beforeSeriesCompile?: () => void;\n afterSeriesCompile?: () => void;\n beforeComponentCompile?: () => void;\n afterComponentCompile?: () => void;\n\n // resize的时候的钩子\n beforeResizeWithUpdate?: () => void;\n afterResizeWithUpdate?: () => void;\n\n // LayoutWithSceneGraph 二次布局\n beforeLayoutWithSceneGraph?: () => void;\n afterLayoutWithSceneGraph?: () => void;\n\n // VGrammar 解析spec\n beforeParseView?: () => void;\n afterParseView?: () => void;\n\n // 初始化runtime\n beforeCreateRuntime?: () => void;\n afterCreateRuntime?: () => void;\n\n // VGrammar EvaluateAsync 时间\n beforeSrViewEvaluateAsync?: () => void;\n afterSrViewEvaluateAsync?: () => void;\n\n // VGrammar RunAsync 时间\n beforeSrViewRunAsync?: () => void;\n afterSrViewRunAsync?: () => void;\n\n // transform测量\n beforeTransform?: (name: string) => void;\n afterTransform?: (name: string) => void;\n\n // Create VRender Stage 时间\n beforeCreateVRenderStage?: () => void;\n afterCreateVRenderStage?: () => void;\n\n // Create VRender Mark 时间\n beforeCreateVRenderMark?: () => void;\n afterCreateVRenderMark?: () => void;\n\n // VGrammar 创建元素完成,vrender 绘图之前\n beforeDoRender?: (vchart?: IVChart) => void;\n\n // VRender Draw 时间\n beforeVRenderDraw?: () => void;\n afterVRenderDraw?: () => void;\n}\n\nexport type IBuildinMarkSpec = {\n group: IGroupMarkSpec;\n symbol: ISymbolMarkSpec;\n rule: IRuleMarkSpec;\n line: ILineMarkSpec;\n text: ITextMarkSpec;\n rect: IRectMarkSpec;\n rect3d: IRect3dMarkSpec;\n image: IImageMarkSpec;\n path: IPathMarkSpec;\n area: IAreaMarkSpec;\n arc: IArcMarkSpec;\n arc3d: IArc3dMarkSpec;\n polygon: IPolygonMarkSpec;\n pyramid3d: IPyramid3dMarkSpec;\n boxPlot: IBoxPlotMarkSpec;\n linkPath: ILinkPathMarkSpec;\n ripple: IRippleMarkSpec;\n};\n\nexport type EnableMarkType = keyof IBuildinMarkSpec;\nexport interface ICustomMarkSpec<T extends EnableMarkType>\n extends IModelSpec,\n IMarkSpec<IBuildinMarkSpec[T]>,\n IAnimationSpec<string, string> {\n type: T;\n /**\n * mark对应的名称,主要用于事件过滤如: { markName: 'yourName' }\n * @since 1.12.5\n */\n name?: string;\n /**\n * 关联的数据索引\n * @default 与系列使用同一份数据\n */\n dataIndex?: number;\n /**\n * dataKey用于绑定数据与Mark的关系\n * 如果数据和系列数据一致,可以不配置,默认会读取系列中的配置\n *\n * @support since 1.9.5\n */\n dataKey?: string | ((datum: any) => string);\n /**\n * 关联的数据id\n */\n dataId?: StringOrNumber;\n /**\n * specify the component type\n * @support since 1.9.0\n */\n componentType?: string;\n /**\n * enable animation of custom-mark or not\n * @since 1.11.0\n */\n animation?: boolean;\n /**\n * 指定 parent Id\n * @since 1.13.0\n */\n parent?: string;\n}\nexport interface ICustomMarkGroupSpec extends ICustomMarkSpec<MarkTypeEnum.group> {\n children?: ICustomMarkSpec<EnableMarkType>[];\n}\n\nexport interface IExtensionMarkSpec<T extends Exclude<EnableMarkType, 'group'>> extends ICustomMarkSpec<T> {\n /**\n * 关联的数据索引\n * @default 与系列使用同一份数据\n */\n dataIndex?: number;\n /**\n * dataKey用于绑定数据与Mark的关系\n * 如果数据和系列数据一致,可以不配置,默认会读取系列中的配置\n *\n * @support since 1.9.5\n */\n dataKey?: string | ((datum: any) => string);\n /**\n * 关联的数据id\n */\n dataId?: StringOrNumber;\n /**\n * specify the component type\n * @support since 1.9.0\n */\n componentType?: string;\n}\n\nexport interface IExtensionGroupMarkSpec extends ICustomMarkSpec<MarkTypeEnum.group> {\n /**\n * 支持子节点\n */\n children?: ICustomMarkSpec<EnableMarkType>[];\n}\n\n/** 纯文本类型的 formatMethod */\nexport type ITextFormatMethod<T extends any[]> = (\n ...args: T\n) => ITextMarkSpec['text'] | { type: 'text'; text: ITextMarkSpec['text'] };\n\nexport type IRichTextFormatMethod<T extends any[]> = (...args: T) =>\n | {\n /**\n * 设置文本类型为富文本\n */\n type: 'rich';\n /**\n * 当文本类型为富文本的时候,设置文本的内容\n */\n text: IRichTextCharacter[];\n }\n | IRichTextCharacter[];\n\n/**\n * 常规 text.formatMethod 支持返回文字字符串,或统一的对象配置\n * (这里特指由 vgrammar 代理的 text 图元)\n */\nexport type IFormatMethod<T extends any[]> = (\n ...args: T\n) => ReturnType<ITextFormatMethod<T>> | ReturnType<IRichTextFormatMethod<T>>;\n"]}
@@ -10,9 +10,9 @@ export declare function animationConfig<Preset extends string>(defaultConfig?: M
10
10
  dataIndex: (datum: any, params: any) => number;
11
11
  dataCount: () => number;
12
12
  }): MarkAnimationSpec;
13
- export declare function userAnimationConfig<M extends string, Preset extends string>(markName: SeriesMarkNameEnum | string, spec: IAnimationSpec<M, Preset>, ctx: IModelMarkAttributeContext): Partial<Record<"none" | "normal" | "state" | "enter" | "exit" | "update" | "appear" | "disappear", boolean | IAnimationConfig | IAnimationConfig[] | IStateAnimateSpec<Preset>>>;
13
+ export declare function userAnimationConfig<M extends string, Preset extends string>(markName: SeriesMarkNameEnum | string, spec: IAnimationSpec<M, Preset>, ctx: IModelMarkAttributeContext): Partial<Record<"none" | "normal" | "state" | "exit" | "update" | "appear" | "enter" | "disappear", boolean | IAnimationConfig | IAnimationConfig[] | IStateAnimateSpec<Preset>>>;
14
14
  export declare function shouldMarkDoMorph(spec: ISeriesSpec & IAnimationSpec<string, string>, markName: string): boolean;
15
15
  export declare function isTimeLineAnimation(animationConfig: IAnimationConfig): boolean;
16
16
  export declare function isChannelAnimation(animationConfig: IAnimationConfig): boolean;
17
- export declare function uniformAnimationConfig<Preset extends string>(config: Partial<Record<IAnimationState, boolean | IStateAnimateSpec<Preset> | IAnimationConfig | IAnimationConfig[]>>, ctx: IModelMarkAttributeContext): Partial<Record<"none" | "normal" | "state" | "enter" | "exit" | "update" | "appear" | "disappear", boolean | IAnimationConfig | IAnimationConfig[] | IStateAnimateSpec<Preset>>>;
17
+ export declare function uniformAnimationConfig<Preset extends string>(config: Partial<Record<IAnimationState, boolean | IStateAnimateSpec<Preset> | IAnimationConfig | IAnimationConfig[]>>, ctx: IModelMarkAttributeContext): Partial<Record<"none" | "normal" | "state" | "exit" | "update" | "appear" | "enter" | "disappear", boolean | IAnimationConfig | IAnimationConfig[] | IStateAnimateSpec<Preset>>>;
18
18
  export declare function isAnimationEnabledForSeries(series: ISeries): boolean;
@@ -8,9 +8,9 @@ import type { ISeries, ISeriesConstructor } from '../../series/interface';
8
8
  import type { IRegion } from '../../region/interface';
9
9
  import type { IComponent, IComponentConstructor } from '../../component/interface';
10
10
  import type { IMark, IRectMark } from '../../mark/interface';
11
- import type { IEvent } from '../../event/interface';
12
11
  import type { DataView } from '@visactor/vdataset';
13
12
  import type { DataSet } from '@visactor/vdataset';
13
+ import { Event } from '../../event/event';
14
14
  import type { IParserOptions } from '@visactor/vdataset';
15
15
  import type { IBoundsLike, Maybe } from '@visactor/vutils';
16
16
  import type { IRunningConfig as IMorphConfig, IView } from '@visactor/vgrammar-core';
@@ -41,8 +41,8 @@ export declare class BaseChart<T extends IChartSpec> extends CompilableBase impl
41
41
  protected _globalScale: IGlobalScale;
42
42
  getGlobalScale(): IGlobalScale;
43
43
  protected _idMap: Map<number, IModel | IMark>;
44
- protected _event: IEvent;
45
- getEvent(): IEvent;
44
+ protected _event: Event;
45
+ getEvent(): Event;
46
46
  protected _dataSet: DataSet;
47
47
  protected _chartData: ChartData;
48
48
  get chartData(): ChartData;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/chart/base/base-chart.ts"],"names":[],"mappings":"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","file":"base-chart.js","sourcesContent":["import type { IRegionConstructor } from '../../region/interface';\nimport { ChartData } from '../chart-meta/data';\nimport type { ICrossHair } from '../../component/crosshair/interface/spec';\nimport type { IDimensionInfo } from '../../event/events/dimension/interface';\nimport type {\n Datum,\n IMarkStateSpec,\n IVisual,\n IVisualSpecScale,\n IRegionQuerier,\n MaybeArray,\n IPadding,\n IRect,\n StringOrNumber,\n IChartSpec,\n IDataValues,\n ILayoutRect,\n ILayoutOrientPadding\n} from '../../typings';\nimport type { ILayoutItem, LayoutCallBack } from '../../layout/interface';\nimport { GlobalScale } from '../../scale/global-scale';\nimport type { ILayoutModelState, IModel, IModelOption, IModelSpecInfo, IUpdateSpecResult } from '../../model/interface';\nimport type {\n IChart,\n IChartLayoutOption,\n IChartRenderOption,\n IChartOption,\n IChartEvaluateOption,\n ILayoutParams,\n DimensionIndexOption,\n IChartSpecTransformerOption,\n IChartSpecTransformer\n} from '../interface';\nimport type { ICartesianSeries, ISeries, ISeriesConstructor } from '../../series/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IRegion } from '../../region/interface';\nimport { ComponentTypeEnum } from '../../component/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IComponent, IComponentConstructor } from '../../component/interface';\nimport type { IMark, IRectMark } from '../../mark/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkTypeEnum } from '../../mark/interface';\nimport type { IEvent } from '../../event/interface';\nimport type { DataView } from '@visactor/vdataset';\n// eslint-disable-next-line no-duplicate-imports\nimport type { DataSet } from '@visactor/vdataset';\nimport { Factory } from '../../core/factory';\nimport { Event } from '../../event/event';\nimport { isArray, isValid, createID, calcPadding, normalizeLayoutPaddingSpec, array } from '../../util';\nimport { BaseModel } from '../../model/base-model';\nimport { BaseMark } from '../../mark/base/base-mark';\nimport { DEFAULT_CHART_WIDTH, DEFAULT_CHART_HEIGHT } from '../../constant/base';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IParserOptions } from '@visactor/vdataset';\nimport type { IBoundsLike, Maybe } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { isFunction, isEmpty, isNil, isString, isEqual, pickWithout } from '@visactor/vutils';\nimport { getDataScheme } from '../../theme/color-scheme/util';\nimport type { IElement, IRunningConfig as IMorphConfig, IView } from '@visactor/vgrammar-core';\nimport { CompilableBase } from '../../compile/compilable-base';\nimport type { IStateInfo } from '../../compile/mark/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { STATE_VALUE_ENUM } from '../../compile/mark/interface';\nimport { ChartEvent, VGRAMMAR_HOOK_EVENT } from '../../constant/event';\nimport type { IGlobalScale } from '../../scale/interface';\nimport { DimensionEventEnum } from '../../event/events/dimension';\nimport type { ITooltip } from '../../component/tooltip/interface';\nimport { calculateChartSize, mergeUpdateResult } from '../util';\nimport { isDiscrete } from '@visactor/vscale';\nimport { updateDataViewInData } from '../../data/initialize';\nimport { LayoutZIndex } from '../../constant/layout';\nimport type { IAxis } from '../../component/axis/interface/common';\n\nexport class BaseChart<T extends IChartSpec> extends CompilableBase implements IChart {\n readonly type: string = 'chart';\n readonly seriesType: string;\n readonly transformerConstructor: new (option: IChartSpecTransformerOption) => IChartSpecTransformer;\n\n readonly id: number = createID();\n\n //FIXME: 转换后的 spec 需要声明 ITransformedChartSpec\n protected _spec: T;\n getSpec() {\n return this._spec;\n }\n setSpec(s: T) {\n // TODO 通过spec设置进行图表更新\n this._spec = s;\n }\n\n getOption() {\n return this._option;\n }\n\n protected _regions: IRegion[] = [];\n // 系列\n protected _series: ISeries[] = [];\n // 组件\n protected _components: IComponent[] = [];\n\n // 布局\n protected _layoutFunc: LayoutCallBack;\n protected _layoutRect: IRect = {\n x: 0,\n y: 0,\n width: DEFAULT_CHART_WIDTH,\n height: DEFAULT_CHART_HEIGHT\n };\n getLayoutRect() {\n return this._layoutRect;\n }\n protected _viewRect: ILayoutRect = {\n width: DEFAULT_CHART_WIDTH,\n height: DEFAULT_CHART_HEIGHT\n };\n getViewRect() {\n return this._viewRect;\n }\n protected _viewBox: IBoundsLike = {\n x1: 0,\n y1: 0,\n x2: DEFAULT_CHART_WIDTH,\n y2: DEFAULT_CHART_HEIGHT\n };\n\n protected _layoutTag: boolean = true;\n getLayoutTag() {\n return this._layoutTag;\n }\n setLayoutTag(tag: boolean, morphConfig?: IMorphConfig, renderNextTick: boolean = true): boolean {\n this._layoutTag = tag;\n const compiler = this.getCompiler();\n\n if (compiler?.getVGrammarView()) {\n compiler.getVGrammarView().updateLayoutTag();\n tag && renderNextTick && compiler.renderNextTick(morphConfig);\n }\n return this._layoutTag;\n }\n\n // 模块参数\n protected _modelOption: IModelOption;\n\n // 全局通道\n // protected _globalScale: { [key: string]: IBaseScale } = {};\n protected _globalScale: IGlobalScale;\n\n getGlobalScale() {\n return this._globalScale;\n }\n\n // mark & model 的 id 映射\n protected _idMap: Map<number, IModel | IMark> = new Map();\n\n protected _event: IEvent;\n getEvent() {\n return this._event;\n }\n\n // data\n protected _dataSet: DataSet;\n protected _chartData: ChartData;\n get chartData() {\n return this._chartData;\n }\n\n protected declare _option: IChartOption;\n\n // 模块内的需要动态影像图表的属性\n readonly state: ILayoutModelState = {\n layoutUpdateRank: 1\n };\n\n // stack\n\n padding: IPadding = { top: 0, left: 0, right: 0, bottom: 0 };\n protected _paddingSpec: ILayoutOrientPadding;\n\n protected _canvasRect: ILayoutRect;\n\n // background\n protected _backgroundMark: IRectMark;\n\n constructor(spec: T, option: IChartOption) {\n super(option);\n this._paddingSpec = normalizeLayoutPaddingSpec(spec.padding ?? option.getTheme().padding);\n\n this._event = new Event(option.eventDispatcher, option.mode);\n this._dataSet = option.dataSet;\n this._chartData = new ChartData(this._dataSet);\n this._modelOption = {\n ...option,\n mode: this._option.mode,\n map: this._idMap,\n getChartLayoutRect: () => this._layoutRect,\n getChartViewRect: () => this._viewRect,\n getChart: () => this,\n globalScale: this._globalScale,\n onError: this._option?.onError,\n disableTriggerEvent: this._option?.disableTriggerEvent === true,\n getSeriesData: this._chartData.getSeriesData.bind(this._chartData)\n };\n\n this._spec = spec;\n }\n\n created(transformer: Maybe<IChartSpecTransformer>) {\n // data\n this._chartData.parseData(this._spec.data);\n // scale\n this._createGlobalScale();\n // background\n this._createBackground();\n // 基础内容\n this._createLayout();\n // 基于spec 创建元素。\n // region\n transformer.forEachRegionInSpec(this._spec, this._createRegion.bind(this));\n // series\n transformer.forEachSeriesInSpec(this._spec, this._createSeries.bind(this));\n // components\n transformer.forEachComponentInSpec(this._spec, this._createComponent.bind(this), this._option.getSpecInfo());\n }\n\n init() {\n (this as any)._beforeInit?.();\n // 元素创建完毕后再执行各元素的初始化 方便各元素能获取到其他模块\n this._regions.forEach(r => r.init({}));\n this._series.forEach(s => s.init({}));\n this._components.forEach(c => c.init({ dataSet: this._dataSet }));\n\n // event\n this._initEvent();\n\n (this as any)._initStack?.();\n\n // data flow start\n this.reDataFlow();\n }\n\n reDataFlow() {\n this._series.forEach(s => s.getRawData()?.markRunning());\n this._series.forEach(s => s.fillData());\n this.updateGlobalScaleDomain();\n }\n\n onResize(width: number, height: number, reRender: boolean = true): void {\n const canvasRect = {\n width,\n height\n };\n this._canvasRect = canvasRect;\n this._updateLayoutRect(this._option.viewBox);\n this.setLayoutTag(true, null, reRender);\n }\n\n updateViewBox(viewBox: IBoundsLike, reLayout: boolean) {\n this._option.viewBox = viewBox;\n this._updateLayoutRect(viewBox);\n this.setLayoutTag(true, null, reLayout);\n }\n\n private _createBackground() {\n const bg = this._spec.background;\n if (!bg || typeof bg !== 'object' || isValid(bg.gradient)) {\n return;\n }\n const backgroundStyle = pickWithout(bg, ['x', 'y', 'width', 'height', 'x1', 'y1', 'image']);\n (backgroundStyle as any).background = (bg as any).image;\n\n this._backgroundMark = Factory.createMark(MarkTypeEnum.group, 'chart-background', {\n model: this as any,\n map: this._option.map,\n getCompiler: this.getCompiler,\n globalScale: this._globalScale\n }) as IRectMark;\n this._backgroundMark.created();\n this._backgroundMark.setStyle({\n ...backgroundStyle,\n x: () => this._viewBox.x1,\n y: () => this._viewBox.y1,\n width: () => this._viewBox.x2 - this._viewBox.x1,\n height: () => this._viewBox.y2 - this._viewBox.y1\n });\n this._backgroundMark.setMarkConfig({\n zIndex: LayoutZIndex.SeriesGroup - 2\n });\n }\n\n protected _createRegion(constructor: IRegionConstructor, specInfo: IModelSpecInfo) {\n if (!constructor) {\n return;\n }\n\n const { spec, ...others } = specInfo;\n const region = new constructor(spec, {\n ...this._modelOption,\n ...others\n });\n if (region) {\n region.created();\n this._regions.push(region);\n }\n }\n\n protected _createSeries(constructor: ISeriesConstructor, specInfo: IModelSpecInfo) {\n if (!constructor) {\n return;\n }\n\n const { spec, ...others } = specInfo;\n\n let region: IRegion | undefined;\n if (isValid(spec.regionId)) {\n region = this.getRegionsInUserId(spec.regionId);\n } else if (isValid(spec.regionIndex)) {\n region = this.getRegionsInIndex([spec.regionIndex])[0];\n }\n\n if (!region && !(region = this._regions[0])) {\n return;\n }\n\n const series = new constructor(spec, {\n ...this._modelOption,\n ...others,\n type: spec.type,\n region,\n globalScale: this._globalScale,\n sourceDataList: this._chartData.dataList\n });\n\n if (series) {\n series.created();\n this._series.push(series);\n region.addSeries(series);\n }\n }\n\n getAllSeries = (): ISeries[] => {\n return this._series ?? [];\n };\n\n getSeriesById(id: number): ISeries | undefined {\n return this._series.find(x => x.id === id);\n }\n\n protected _createComponent(constructor: IComponentConstructor, specInfo: IModelSpecInfo) {\n const component = constructor.createComponent(specInfo, {\n ...this._modelOption,\n type: constructor.type,\n getAllRegions: this.getAllRegions,\n getRegionsInIndex: this.getRegionsInIndex,\n getRegionsInIds: this.getRegionsInIds,\n getRegionsInUserIdOrIndex: this.getRegionsInUserIdOrIndex,\n getAllSeries: this.getAllSeries,\n getSeriesInIndex: this.getSeriesInIndex,\n getSeriesInIds: this.getSeriesInIds,\n getSeriesInUserIdOrIndex: this.getSeriesInUserIdOrIndex,\n getAllComponents: this.getComponents,\n getComponentByIndex: this.getComponentByIndex,\n getComponentByUserId: this.getComponentByUserId,\n getComponentsByKey: this.getComponentsByKey,\n getComponentsByType: this.getComponentsByType\n });\n if (!component) {\n return;\n }\n component.created();\n this._components.push(component);\n }\n\n getAllComponents(): IComponent[] {\n return this._components;\n }\n\n getAllModels(): IModel[] {\n return [].concat(this.getAllSeries(), this.getAllComponents(), this.getAllRegions());\n }\n\n getModelInFilter(filter: string | { type: string; index: number } | ((model: IModel) => boolean)) {\n if (isString(filter)) {\n return this.getAllModels().find(m => m.userId === filter);\n } else if (isFunction(filter)) {\n return this.getAllModels().find(m => filter(m));\n }\n let index = 0;\n return this.getAllModels().find(m => {\n if ((m.specKey ?? m.type) === filter.type) {\n if (index === filter.index) {\n return true;\n }\n index++;\n }\n return false;\n });\n }\n\n private _createLayout() {\n this._updateLayoutRect(this._option.viewBox);\n this._initLayoutFunc();\n }\n\n setLayout(layout: LayoutCallBack) {\n // 统一自定义 layout 到 option 中\n this._option.layout = layout;\n this._initLayoutFunc();\n }\n\n /** 可以通过设置 layout = null 来取消自定义布局。启用spec上的布局配置 */\n private _initLayoutFunc() {\n this._layoutFunc = this._option.layout;\n if (!this._layoutFunc) {\n // 判断是否使用3d的layout\n let use3dLayout = false;\n // 查找是否需要使用3d布局模块\n if ((this._spec as any).zField || (this._spec.series && this._spec.series.some((s: any) => s.zField))) {\n use3dLayout = true;\n }\n const constructor = Factory.getLayoutInKey(this._spec.layout?.type ?? (use3dLayout ? 'layout3d' : 'base'));\n if (constructor) {\n const layout = new constructor(this._spec.layout, {\n onError: this._option?.onError\n });\n this._layoutFunc = layout.layoutItems.bind(layout);\n }\n }\n }\n\n layout(params: ILayoutParams): void {\n this._option.performanceHook?.beforeLayoutWithSceneGraph?.();\n if (this.getLayoutTag()) {\n this._event.emit(ChartEvent.layoutStart, { chart: this, vchart: this._option.globalInstance });\n\n this.onLayoutStart(params);\n const elements = this.getLayoutElements();\n this._layoutFunc(this, elements, this._layoutRect, this._viewBox);\n this._event.emit(ChartEvent.afterLayout, { elements, chart: this });\n this.setLayoutTag(false);\n this.onLayoutEnd(params);\n\n this._event.emit(ChartEvent.layoutEnd, { chart: this, vchart: this._option.globalInstance });\n }\n this._option.performanceHook?.afterLayoutWithSceneGraph?.();\n }\n\n // 通知所有需要通知的元素 onLayout 钩子\n onLayoutStart(option: IChartLayoutOption) {\n const elements = this.getAllModels();\n elements.forEach(element => element.onLayoutStart(this._layoutRect, this._viewRect, option));\n }\n\n // 通知所有需要通知的元素 onLayoutEnd 钩子\n onLayoutEnd(option: IChartLayoutOption) {\n const elements = this.getAllModels();\n elements.forEach(element => {\n // series.onLayoutEnd will be called by region model\n if (element.modelType !== 'series') {\n element.onLayoutEnd(option);\n }\n });\n }\n\n onEvaluateEnd(option: IChartEvaluateOption) {\n const elements = [...this._components, ...this._regions, ...this._series];\n elements.forEach(element => element.onEvaluateEnd(option));\n }\n\n getLayoutElements(): ILayoutItem[] {\n return this.getAllModels()\n .map(i => i.layout)\n .filter(i => !!i);\n }\n\n // 区域\n getRegionsInIndex = (index?: number[]): IRegion[] => {\n if (!index || index.length === 0) {\n return [this._regions[0]];\n }\n return this._regions.filter((_r, i) => index.includes(i));\n };\n\n getAllRegions = () => {\n return this._regions;\n };\n\n getRegionsInIds = (ids: number[]): IRegion[] => {\n if (!ids) {\n return [];\n }\n return this._regions.filter(r => ids.includes(r.id));\n };\n\n getRegionsInQuerier = (region?: MaybeArray<IRegionQuerier>) => {\n if (region) {\n return this._regions.filter((r, index) => {\n return array(region).some(\n regionFilter =>\n (isValid(regionFilter.regionId) && regionFilter.regionId === r.userId) || regionFilter.regionIndex === index\n );\n });\n }\n return this._regions;\n };\n\n getRegionsInUserId = (userId: StringOrNumber): IRegion | undefined => {\n if (!userId) {\n return undefined;\n }\n return this._regions.find(r => r.userId === userId);\n };\n\n getRegionsInUserIdOrIndex = (user_ids?: StringOrNumber[], index?: number[]): IRegion[] => {\n const regions = this.getAllRegions();\n return regions.filter(r => {\n if (user_ids?.length) {\n return r.userId && user_ids.includes(r.userId);\n } else if (index?.length) {\n return index.includes(r.getSpecIndex());\n }\n return true;\n });\n };\n\n // 模块\n getComponents = () => {\n return this._components;\n };\n\n // 区域\n getSeriesInIndex = (index?: number[]): ISeries[] => {\n if (!index || index.length === 0) {\n return [this._series[0]];\n }\n return this._series.filter((_r, i) => index.includes(i));\n };\n\n getSeriesInIds = (ids?: number[]): ISeries[] => {\n if (!ids) {\n return [];\n }\n return this._series.filter(r => ids.includes(r.id));\n };\n\n getSeriesInUserId = (userId: StringOrNumber): ISeries | undefined => {\n if (!userId) {\n return undefined;\n }\n return this._series.find(r => r.userId === userId);\n };\n\n getSeriesInUserIdOrIndex = (user_ids?: StringOrNumber[], index?: number[]): ISeries[] => {\n const series = this.getAllSeries();\n return series.filter(s => {\n if (user_ids?.length) {\n return s.userId && user_ids.includes(s.userId);\n } else if (index?.length) {\n return index.includes(s.getSpecIndex());\n }\n return true;\n });\n };\n\n getComponentByIndex = (key: string, index: number) => {\n const components = this._components.filter(c => (c.specKey || c.type) === key);\n if (!components || components.length === 0) {\n return undefined;\n }\n return components[index];\n };\n\n getComponentsByKey = (key: string) => {\n return this._components.filter(c => (c.specKey || c.type) === key);\n };\n\n getComponentByUserId = (userId: StringOrNumber) => {\n const component = this._components.find(s => s.userId === userId);\n if (component) {\n return component;\n }\n return undefined;\n };\n\n getComponentsByType = (type: string) => {\n return this._components.filter(c => c.type === type);\n };\n\n getModelById(id: number): IModel | undefined {\n const model = this._idMap.get(id);\n if (model && model instanceof BaseModel) {\n return model;\n }\n return undefined;\n }\n\n getModelByUserId(userId: StringOrNumber): IModel | undefined {\n // TODO: 考虑通过 map 结构优化获取方式 & 补充所有 model 的寻找方法\n const series = this.getSeriesInUserId(userId);\n if (series) {\n return series;\n }\n const region = this.getRegionsInUserId(userId);\n if (region) {\n return region;\n }\n const component = this.getComponentByUserId(userId);\n if (component) {\n return component;\n }\n return undefined;\n }\n\n getAllMarks(): IMark[] {\n const items = Array.from(this._idMap.values());\n return items.filter(item => item && item instanceof BaseMark) as IMark[];\n }\n\n getMarkById(id: number): IMark | undefined {\n const mark = this._idMap.get(id);\n if (mark && mark instanceof BaseMark) {\n return mark as IMark;\n }\n return undefined;\n }\n\n getMarkByUserName(name: string): IMark[] {\n return this.getAllMarks().filter(m => m.name && m.name === name);\n }\n\n updateData(id: StringOrNumber, data: unknown, updateGlobalScale: boolean = true, options?: IParserOptions) {\n const dv = this._dataSet.getDataView(id as string);\n if (dv) {\n dv.markRunning();\n dv.parseNewData(data, options);\n }\n\n if (updateGlobalScale) {\n this.updateGlobalScaleDomain();\n }\n this.getAllModels().forEach(model => model.onDataUpdate());\n }\n\n updateFullData(data: IDataValues | IDataValues[], updateGlobalScale: boolean = true) {\n array(data).forEach(d => {\n const dv = this._dataSet.getDataView(d.id);\n if (dv) {\n dv.markRunning();\n }\n });\n array(data).forEach(d => {\n const dv = this._dataSet.getDataView(d.id);\n if (dv) {\n updateDataViewInData(dv, d, true);\n }\n });\n if (updateGlobalScale) {\n this.updateGlobalScaleDomain();\n }\n this.getAllModels().forEach(model => model.onDataUpdate());\n }\n\n onRender(option: IChartRenderOption) {\n // do nothing\n }\n\n setCanvasRect(width: number, height: number) {\n this._canvasRect = { width, height };\n }\n\n getCanvasRect(): Omit<IRect, 'x' | 'y'> {\n if (this._canvasRect) {\n return this._canvasRect;\n }\n\n this._canvasRect = calculateChartSize(this._spec, this._option, {\n width: DEFAULT_CHART_WIDTH,\n height: DEFAULT_CHART_HEIGHT\n });\n\n return this._canvasRect;\n }\n\n getSeriesData(id: StringOrNumber | undefined, index: number | undefined): DataView | undefined {\n return this._chartData.getSeriesData(id, index);\n }\n\n private _transformSpecScale() {\n const scales: IChartSpec['scales'] = this._spec.scales ? [...this._spec.scales] : [];\n let colorScaleSpec: IVisualSpecScale<any, any> = scales.find(s => s.id === 'color');\n const colorScheme = this.getColorScheme();\n if (!colorScaleSpec) {\n colorScaleSpec = {\n type: 'ordinal',\n id: 'color',\n domain: null,\n range: null\n };\n scales.push(colorScaleSpec);\n if (this._spec.color) {\n const colorSpec = this._spec.color as string[] | IVisual<string>;\n\n // range array\n if (isArray(colorSpec)) {\n colorScaleSpec.range = colorSpec;\n } else {\n const tempSpec = colorSpec as IVisualSpecScale<any, any>;\n Object.prototype.hasOwnProperty.call(tempSpec, 'type') && (colorScaleSpec.type = tempSpec.type);\n Object.prototype.hasOwnProperty.call(tempSpec, 'domain') && (colorScaleSpec.domain = tempSpec.domain);\n Object.prototype.hasOwnProperty.call(tempSpec, 'range') && (colorScaleSpec.range = tempSpec.range);\n Object.prototype.hasOwnProperty.call(tempSpec, 'specified') &&\n (colorScaleSpec.specified = tempSpec.specified);\n Object.prototype.hasOwnProperty.call(tempSpec, 'clamp') && (colorScaleSpec.clamp = tempSpec.clamp);\n }\n }\n }\n // 如果没有range设置\n // length === 0 就认为是没有配置,用户配置 color: [] 依然认为是无效配置,启用主题色板\n if (!colorScaleSpec.range?.length) {\n colorScaleSpec.range = getDataScheme(colorScheme);\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n colorScaleSpec.rangeTheme = true;\n }\n return scales;\n }\n\n // 全局通道\n private _createGlobalScale() {\n this._globalScale = new GlobalScale(this._transformSpecScale(), this);\n this._modelOption.globalScale = this._globalScale;\n }\n\n updateGlobalScaleDomain() {\n const domainSet = new Set();\n this._series.forEach(s => {\n const keys = s.getSeriesKeys();\n keys && keys.forEach(k => domainSet.add(k));\n });\n // domain\n const domain = Array.from(domainSet);\n // 如果 global scale 当前没有 domain 的话,就使用这个domain\n // 整理了目前会影响全局 scale 的逻辑,但是当前这个节点使用这个逻辑可行\n // 但是考虑到组件也可能会有修改 scale 的逻辑\n // 增加一个属性设置优先级也许是必须的?\n this._globalScale.updateScaleDomain(domain);\n }\n\n updateGlobalScale(result: IUpdateSpecResult) {\n mergeUpdateResult(result, this._globalScale.updateSpec(this._transformSpecScale()));\n }\n\n updateGlobalScaleTheme() {\n const colorSpec = this._globalScale.getScaleSpec('color');\n const colorScheme = this.getColorScheme();\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n if (colorSpec.rangeTheme) {\n colorSpec.range = getDataScheme(colorScheme);\n this._globalScale.getScale('color').range(colorSpec.range);\n }\n }\n\n private _getSpecKeys(spec: T) {\n const ignoreKeys: Record<string, boolean> = { width: true, height: true };\n return Object.keys(spec)\n .filter(key => !ignoreKeys[key])\n .sort();\n }\n\n updateSpec(spec: T) {\n const result = {\n change: false,\n reMake: false,\n reRender: false,\n reSize: false,\n reCompile: false\n };\n // 需要重新布局\n this.setLayoutTag(true, null, false);\n // 第一版简易逻辑如果配置项出现增删,直接重新创建chart\n // 如果出现类型不同,同上\n if (spec.type !== this.type) {\n result.reMake = true;\n return result;\n }\n // spec set & transformSpec\n // diff meta length;\n\n const currentKeys = this._getSpecKeys(this._spec);\n const nextKeys = this._getSpecKeys(spec);\n if (!isEqual(currentKeys, nextKeys)) {\n result.reMake = true;\n return result;\n }\n // spec key 的个数一致,但是数组长度不一致时。remake\n for (let i = 0; i < currentKeys.length; i++) {\n const key = currentKeys[i];\n if (isArray((this._spec as any)[key]) && (this._spec as any)[key].length !== array((spec as any)[key]).length) {\n result.reMake = true;\n return result;\n }\n }\n const oldSpec = this._spec;\n this._spec = spec;\n // update chart config\n this.updateChartConfig(result, oldSpec);\n if (result.reMake) {\n return result;\n }\n\n this.updateGlobalScale(result);\n if (result.reMake) {\n return result;\n }\n // region 变化\n this.updateRegionSpec(result);\n if (result.reMake) {\n return result;\n }\n this.updateComponentSpec(result);\n if (result.reMake) {\n return result;\n }\n this.updateSeriesSpec(result);\n if (result.reMake) {\n return result;\n }\n /**\n * 当图表不是`remake`,而是部分更新的时候,所有的model需要`reInit`\n * 由于 data 最终是挂在到model上的,data的transform又依赖model中的`spec`,\n * 所以在更新model前需要调用`reInit`确保`spec`和内部变量已经更新\n */\n this.reInit();\n this.updateDataSpec();\n // ensure that the domain of the scale follows the data change\n this.updateGlobalScaleDomain();\n return result;\n }\n\n updateChartConfig(result: IUpdateSpecResult, oldSpec: IChartSpec) {\n // padding;\n this._paddingSpec = normalizeLayoutPaddingSpec(this._spec.padding ?? this._option?.getTheme().padding);\n\n // re compute padding & layout\n this._updateLayoutRect(this._viewBox);\n }\n\n updateDataSpec() {\n if (!this._spec.data) {\n return;\n }\n this._chartData.updateData(this._spec.data, false, true);\n }\n\n updateRegionSpec(result: IUpdateSpecResult) {\n if (!this._spec?.region) {\n return;\n }\n // 长度不同,直接判定为 remake\n if (this._spec.region.length !== this._regions.length) {\n result.reMake = true;\n return;\n }\n this._regions.forEach(r => {\n mergeUpdateResult(result, r.updateSpec(this._spec.region[r.getSpecIndex()]));\n });\n }\n\n updateComponentSpec(result: IUpdateSpecResult) {\n // 用来检测组件是否有新增\n const componentCache: {\n [key in string]: {\n specCount: number;\n componentCount: number;\n };\n } = {};\n const checkVisibleComponents: Record<string, boolean> = {\n [ComponentTypeEnum.title]: true,\n [ComponentTypeEnum.brush]: true,\n [ComponentTypeEnum.mapLabel]: true,\n [ComponentTypeEnum.indicator]: true\n };\n\n this._components.forEach(c => {\n if (c.type === ComponentTypeEnum.label || c.type === ComponentTypeEnum.totalLabel) {\n // label配置都会被解析到series中,所以不适合放在这里进行比对\n return;\n }\n if (checkVisibleComponents[c.type]) {\n checkVisibleComponents[c.type] = false;\n }\n\n const compSpecKey = c.specKey || c.type;\n // 每一个组件获取对应的speck\n const cmpSpec = (this._spec as any)[compSpecKey] ?? {};\n\n if (isArray(cmpSpec)) {\n componentCache[compSpecKey] = componentCache[compSpecKey] || {\n specCount: cmpSpec.length,\n componentCount: 0\n };\n componentCache[compSpecKey].componentCount++;\n mergeUpdateResult(result, c.updateSpec(cmpSpec[c.getSpecIndex()] ?? {}, cmpSpec));\n } else {\n mergeUpdateResult(result, c.updateSpec(cmpSpec));\n }\n });\n for (const key in componentCache) {\n if (Object.prototype.hasOwnProperty.call(componentCache, key)) {\n const element = componentCache[key];\n if (element.componentCount !== element.specCount) {\n result.reMake = true;\n }\n }\n }\n\n /** 这些组件 visible: false 不创建组件,也在this._components中,所以需要额外检测是否有visible 的切换 */\n const isVisible = (compSpec: any) => compSpec && compSpec.visible !== false;\n Object.keys(checkVisibleComponents).forEach(type => {\n if (checkVisibleComponents[type]) {\n const compSpec = (this._spec as any)[type];\n const switchToVisible = isArray(compSpec) ? compSpec.some(isVisible) : isVisible(compSpec);\n\n if (switchToVisible) {\n result.reMake = true;\n }\n }\n });\n }\n\n updateSeriesSpec(result: IUpdateSpecResult) {\n // 长度不同,直接判定为 remake\n if (this._spec.series.length !== this._series.length) {\n result.reMake = true;\n return;\n }\n this._series.forEach(s => {\n const spec = this._spec.series[s.getSpecIndex()];\n mergeUpdateResult(result, s.updateSpec(spec));\n });\n }\n\n getCanvas() {\n return this.getCompiler()?.getCanvas() ?? null;\n }\n\n private _updateLayoutRect(viewBox: IBoundsLike) {\n const canvasRect = this.getCanvasRect();\n let viewRect = canvasRect;\n if (viewBox) {\n this._viewBox = viewBox;\n const { x1 = 0, y1 = 0, x2, y2 } = viewBox;\n viewRect = {\n width: x2 - x1,\n height: y2 - y1\n };\n } else {\n this._viewBox = { x1: 0, y1: 0, x2: viewRect.width, y2: viewRect.height };\n }\n this._viewRect = viewRect;\n // resize 时 padding 也应该会发生变化 先计算\n this.padding = calcPadding(this._paddingSpec, viewRect, viewRect);\n this._layoutRect.width = viewRect.width - this.padding.left - this.padding.right;\n this._layoutRect.height = viewRect.height - this.padding.top - this.padding.bottom;\n this._layoutRect.x = this.padding.left;\n this._layoutRect.y = this.padding.top;\n\n this._event.emit(ChartEvent.layoutRectUpdate, { chart: this });\n }\n\n /** 设置当前全局主题 */\n setCurrentTheme() {\n // update chart config\n this.updateChartConfig({ change: true, reMake: false }, this._spec);\n\n // 需要重新布局\n this.setLayoutTag(true, null, false);\n\n // 设置色板,只设置 colorScale 的 range\n this.updateGlobalScaleTheme();\n this.reInit();\n }\n\n reInit() {\n [...this._regions, ...this._series, ...this._components].forEach(model => {\n const specInfo = model.getSpecInfo();\n\n if (specInfo && specInfo.spec) {\n // 找不到,说明在更新spec中,组件被注销了\n model.reInit(specInfo.spec);\n }\n });\n }\n\n clear() {\n // call on recompile & release\n this.getAllModels().forEach(i => i.clear?.());\n }\n\n compile() {\n this.compileBackground();\n this.compileLayout();\n this.compileRegions();\n this.compileSeries();\n this.compileComponents();\n }\n\n afterCompile() {\n this.getAllRegions().forEach(r => {\n r.afterCompile?.();\n });\n this.getAllSeries().forEach(s => {\n s.afterCompile?.();\n });\n this.getAllComponents().forEach(c => {\n c.afterCompile?.();\n });\n }\n\n compileLayout() {\n const { width, height } = this.getCanvasRect();\n this.getCompiler().setSize(width, height);\n }\n\n compileBackground() {\n if (!this._backgroundMark) {\n return;\n }\n this._backgroundMark.compile({ context: { model: this } });\n this._backgroundMark.getProduct()?.layout(() => {\n // console.log('region mark layout');\n });\n }\n\n compileRegions() {\n this._option.performanceHook?.beforeRegionCompile?.();\n this.getAllRegions().forEach(r => {\n r.compile();\n });\n this._option.performanceHook?.afterRegionCompile?.();\n }\n\n compileSeries() {\n this._option.performanceHook?.beforeSeriesCompile?.();\n this.getAllSeries().forEach(s => {\n s.compile();\n });\n this._option.performanceHook?.afterSeriesCompile?.();\n }\n\n compileComponents() {\n this._option.performanceHook?.beforeComponentCompile?.();\n this.getAllComponents().forEach(c => {\n c.compile();\n });\n this._option.performanceHook?.afterComponentCompile?.();\n }\n\n release() {\n /* release 前的处理 */\n [...this._components, ...this._regions, ...this._series].forEach(m => {\n m.beforeRelease();\n });\n\n /* 开始 release */\n super.release();\n // clear event , temporary function of chart items\n this.clear();\n\n [...this._components, ...this._regions, ...this._series].forEach(m => {\n m.release();\n });\n this._components = this._regions = this._series = [];\n this._spec = {} as any;\n // FIXME: type lint\n this._dataSet = this._globalScale = this._layoutFunc = null as unknown as any;\n this._layoutTag = false;\n this._idMap.clear();\n }\n\n onLayout(srView: IView) {\n const root = srView.rootMark;\n this.layout({ group: root, srView });\n }\n\n /**\n * 更新或设置图元状态\n * @param state 状态筛选器\n * @param filter 筛选器\n */\n updateState(\n state: Record<string, Omit<IMarkStateSpec<unknown>, 'style'>>,\n filter?: (series: ISeries, mark: IMark, stateKey: string) => boolean //series + mark 筛选\n ): void {\n const seriesArr = this.getAllSeries();\n for (const key in state) {\n if (isEmpty(state[key])) {\n continue;\n }\n const stateSpec = state[key];\n let stateInfo: IStateInfo = { stateValue: key };\n if (isFunction(stateSpec.filter)) {\n stateInfo = { filter: stateSpec.filter, ...stateInfo };\n } else {\n stateInfo = { ...stateSpec.filter, ...stateInfo };\n }\n if (stateSpec.level) {\n stateInfo.level = stateSpec.level;\n }\n seriesArr.forEach(series => {\n series.getMarks().forEach(m => {\n if (!m.stateStyle[key]) {\n return;\n }\n if (!filter || filter(series, m, key)) {\n m.state.changeStateInfo(stateInfo);\n m.updateMarkState(key);\n }\n });\n });\n }\n }\n\n /**\n * 更新图元选中状态\n * @param datum hover 图元数据\n * @param filter 筛选器 用来筛选系列与mark\n * @param region region 筛选器\n */\n setSelected(\n datum: MaybeArray<any> | null,\n filter?: (series: ISeries, mark: IMark) => boolean,\n region?: IRegionQuerier\n ): void {\n this._setStateInDatum(STATE_VALUE_ENUM.STATE_SELECTED, true, datum, filter, region);\n }\n\n /**\n * 更新图元 hover 状态\n * @param datum hover 图元数据\n * @param filter 筛选器 用来筛选系列与mark\n * @param region region 筛选器\n */\n setHovered(\n datum: MaybeArray<Datum> | null,\n filter?: (series: ISeries, mark: IMark) => boolean,\n region?: IRegionQuerier\n ): void {\n this._setStateInDatum(STATE_VALUE_ENUM.STATE_HOVER, true, datum, filter, region);\n }\n\n /**\n * 清除所有图元的状态\n *\n * @since 1.11.0\n */\n clearState(state: string) {\n this.getAllRegions().forEach(r => {\n r.interaction.clearEventElement(state, true);\n r.interaction.resetInteraction(state, null);\n return;\n });\n }\n\n /**\n * 清除所有图元的所有状态\n *\n * @since 1.12.4\n */\n clearAllStates() {\n this.getAllRegions().forEach(r => {\n r.interaction.clearAllEventElement();\n r.interaction.resetAllInteraction();\n return;\n });\n }\n\n /**\n * 清除所有图元的选中状态\n *\n * @since 1.11.0\n */\n clearSelected() {\n this.clearState(STATE_VALUE_ENUM.STATE_SELECTED);\n }\n\n /**\n * 清除所有图元的hover状态\n *\n * @since 1.11.0\n */\n clearHovered() {\n this.clearState(STATE_VALUE_ENUM.STATE_HOVER);\n }\n\n private _initEvent() {\n [ChartEvent.dataZoomChange, ChartEvent.scrollBarChange].forEach(event => {\n this._event.on(event, ({ value }) => {\n this._disableMarkAnimation(['exit', 'update']);\n const enableMarkAnimate = () => {\n this._enableMarkAnimation(['exit', 'update']);\n this._event.off(VGRAMMAR_HOOK_EVENT.AFTER_MARK_RENDER_END, enableMarkAnimate);\n };\n this._event.on(VGRAMMAR_HOOK_EVENT.AFTER_MARK_RENDER_END, enableMarkAnimate);\n });\n });\n }\n\n protected _enableMarkAnimation(states: string | string[]) {\n const marks = this.getAllMarks();\n marks.forEach(mark => {\n const product = mark.getProduct();\n if (product && product.animate) {\n product.animate.enableAnimationState(states);\n }\n });\n }\n\n protected _disableMarkAnimation(states: string | string[]) {\n const marks = this.getAllMarks();\n marks.forEach(mark => {\n const product = mark.getProduct();\n if (product && product.animate) {\n product.animate.disableAnimationState(states);\n }\n });\n }\n\n protected _setStateInDatum(\n stateKey: string,\n checkReverse: boolean,\n datum: MaybeArray<Datum> | null,\n filter?: (series: ISeries, mark: IMark) => boolean,\n region?: IRegionQuerier\n ) {\n datum = datum ? array(datum) : null;\n const keys = !datum ? null : Object.keys(datum[0]);\n this.getRegionsInQuerier(region).forEach(r => {\n if (!datum) {\n r.interaction.clearEventElement(stateKey, true);\n return;\n }\n r.getSeries().forEach(s => {\n s.getMarks().forEach(m => {\n if (!m.getProduct()) {\n return;\n }\n if (!filter || (isFunction(filter) && filter(s, m))) {\n const isCollect = m.getProduct().isCollectionMark();\n const elements = m.getProduct().elements;\n let pickElements = [] as IElement[];\n if (isCollect) {\n pickElements = elements.filter(e => {\n const elDatum = e.getDatum();\n // eslint-disable-next-line max-nested-callbacks, eqeqeq\n (datum as Datum[]).every((d, index) => keys.every(k => d[k] == elDatum[index][k]));\n });\n } else {\n if (datum.length > 1) {\n const datumTemp = (datum as Datum[]).slice();\n pickElements = elements.filter(e => {\n if (datumTemp.length === 0) {\n return false;\n }\n const elDatum = e.getDatum();\n // eslint-disable-next-line max-nested-callbacks, eqeqeq\n const index = datumTemp.findIndex(d => keys.every(k => d[k] == elDatum[k]));\n if (index >= 0) {\n datumTemp.splice(index, 1);\n return true;\n }\n return false;\n });\n } else {\n // eslint-disable-next-line eqeqeq\n const el = elements.find(e => keys.every(k => datum[0][k] == e.getDatum()[k]));\n el && (pickElements = [el]);\n }\n }\n pickElements.forEach(element => {\n r.interaction.startInteraction(stateKey, element);\n });\n }\n });\n });\n if (checkReverse) {\n r.interaction.reverseEventElement(stateKey);\n }\n });\n }\n\n /**\n * setDimensionIndex could trigger mark state, tooltip, crosshair\n * @param value dimension value\n * @param opt option for set trigger\n */\n setDimensionIndex(value: StringOrNumber, opt: DimensionIndexOption) {\n // event\n let dimensionInfo: IDimensionInfo[] | null = null;\n Array.from(this._event.getComposedEventMap().values()).forEach(e => {\n const { eventType, event } = e;\n if (eventType === DimensionEventEnum.dimensionHover || eventType === DimensionEventEnum.dimensionClick) {\n const info = event.dispatch(value, opt) as [];\n if (info?.length) {\n dimensionInfo = info;\n }\n }\n });\n const isUnableValue =\n isNil(value) || !dimensionInfo || dimensionInfo.every(d => isDiscrete(d.axis.getScale().type) && isNil(d.index));\n // tooltip\n if (opt.tooltip !== false) {\n const tooltip = this.getComponentsByType(ComponentTypeEnum.tooltip)[0] as unknown as ITooltip;\n\n if (tooltip?.getVisible()) {\n if (isUnableValue) {\n (<any>tooltip).hideTooltip?.();\n } else {\n const dataFilter = {};\n dimensionInfo.forEach((d: IDimensionInfo) => {\n const { axis, value, data } = d;\n const isY = axis.getOrient() === 'left' || axis.getOrient() === 'right';\n data.forEach(d => {\n const field = isY ? (<ICartesianSeries>d.series).fieldY[0] : (<ICartesianSeries>d.series).fieldX[0];\n\n dataFilter[field] = d.datum?.[0]?.[field] ?? value;\n });\n });\n tooltip.showTooltip(dataFilter, opt.showTooltipOption);\n }\n }\n }\n if (opt.crosshair !== false) {\n const crosshair = this.getComponentsByType(ComponentTypeEnum.cartesianCrosshair)[0] as unknown as ICrossHair;\n\n if (crosshair && crosshair.clearAxisValue && crosshair.setAxisValue) {\n if (isUnableValue) {\n crosshair.hideCrosshair();\n } else {\n crosshair.showCrosshair(dimensionInfo as { axis: IAxis; value: string | number }[]);\n }\n }\n }\n }\n\n getColorScheme() {\n return this._option.getTheme?.().colorScheme;\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/chart/base/base-chart.ts"],"names":[],"mappings":"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","file":"base-chart.js","sourcesContent":["import type { IRegionConstructor } from '../../region/interface';\nimport { ChartData } from '../chart-meta/data';\nimport type { ICrossHair } from '../../component/crosshair/interface/spec';\nimport type { IDimensionInfo } from '../../event/events/dimension/interface';\nimport type {\n Datum,\n IMarkStateSpec,\n IVisual,\n IVisualSpecScale,\n IRegionQuerier,\n MaybeArray,\n IPadding,\n IRect,\n StringOrNumber,\n IChartSpec,\n IDataValues,\n ILayoutRect,\n ILayoutOrientPadding\n} from '../../typings';\nimport type { ILayoutItem, LayoutCallBack } from '../../layout/interface';\nimport { GlobalScale } from '../../scale/global-scale';\nimport type { ILayoutModelState, IModel, IModelOption, IModelSpecInfo, IUpdateSpecResult } from '../../model/interface';\nimport type {\n IChart,\n IChartLayoutOption,\n IChartRenderOption,\n IChartOption,\n IChartEvaluateOption,\n ILayoutParams,\n DimensionIndexOption,\n IChartSpecTransformerOption,\n IChartSpecTransformer\n} from '../interface';\nimport type { ICartesianSeries, ISeries, ISeriesConstructor } from '../../series/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IRegion } from '../../region/interface';\nimport { ComponentTypeEnum } from '../../component/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IComponent, IComponentConstructor } from '../../component/interface';\nimport type { IMark, IRectMark } from '../../mark/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkTypeEnum } from '../../mark/interface';\nimport type { IEvent } from '../../event/interface';\nimport type { DataView } from '@visactor/vdataset';\n// eslint-disable-next-line no-duplicate-imports\nimport type { DataSet } from '@visactor/vdataset';\nimport { Factory } from '../../core/factory';\nimport { Event } from '../../event/event';\nimport { isArray, isValid, createID, calcPadding, normalizeLayoutPaddingSpec, array } from '../../util';\nimport { BaseModel } from '../../model/base-model';\nimport { BaseMark } from '../../mark/base/base-mark';\nimport { DEFAULT_CHART_WIDTH, DEFAULT_CHART_HEIGHT } from '../../constant/base';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IParserOptions } from '@visactor/vdataset';\nimport type { IBoundsLike, Maybe } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { isFunction, isEmpty, isNil, isString, isEqual, pickWithout } from '@visactor/vutils';\nimport { getDataScheme } from '../../theme/color-scheme/util';\nimport type { IElement, IRunningConfig as IMorphConfig, IView } from '@visactor/vgrammar-core';\nimport { CompilableBase } from '../../compile/compilable-base';\nimport type { IStateInfo } from '../../compile/mark/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { STATE_VALUE_ENUM } from '../../compile/mark/interface';\nimport { ChartEvent, VGRAMMAR_HOOK_EVENT } from '../../constant/event';\nimport type { IGlobalScale } from '../../scale/interface';\nimport { DimensionEventEnum } from '../../event/events/dimension';\nimport type { ITooltip } from '../../component/tooltip/interface';\nimport { calculateChartSize, mergeUpdateResult } from '../util';\nimport { isDiscrete } from '@visactor/vscale';\nimport { updateDataViewInData } from '../../data/initialize';\nimport { LayoutZIndex } from '../../constant/layout';\nimport type { IAxis } from '../../component/axis/interface/common';\n\nexport class BaseChart<T extends IChartSpec> extends CompilableBase implements IChart {\n readonly type: string = 'chart';\n readonly seriesType: string;\n readonly transformerConstructor: new (option: IChartSpecTransformerOption) => IChartSpecTransformer;\n\n readonly id: number = createID();\n\n //FIXME: 转换后的 spec 需要声明 ITransformedChartSpec\n protected _spec: T;\n getSpec() {\n return this._spec;\n }\n setSpec(s: T) {\n // TODO 通过spec设置进行图表更新\n this._spec = s;\n }\n\n getOption() {\n return this._option;\n }\n\n protected _regions: IRegion[] = [];\n // 系列\n protected _series: ISeries[] = [];\n // 组件\n protected _components: IComponent[] = [];\n\n // 布局\n protected _layoutFunc: LayoutCallBack;\n protected _layoutRect: IRect = {\n x: 0,\n y: 0,\n width: DEFAULT_CHART_WIDTH,\n height: DEFAULT_CHART_HEIGHT\n };\n getLayoutRect() {\n return this._layoutRect;\n }\n protected _viewRect: ILayoutRect = {\n width: DEFAULT_CHART_WIDTH,\n height: DEFAULT_CHART_HEIGHT\n };\n getViewRect() {\n return this._viewRect;\n }\n protected _viewBox: IBoundsLike = {\n x1: 0,\n y1: 0,\n x2: DEFAULT_CHART_WIDTH,\n y2: DEFAULT_CHART_HEIGHT\n };\n\n protected _layoutTag: boolean = true;\n getLayoutTag() {\n return this._layoutTag;\n }\n setLayoutTag(tag: boolean, morphConfig?: IMorphConfig, renderNextTick: boolean = true): boolean {\n this._layoutTag = tag;\n const compiler = this.getCompiler();\n\n if (compiler?.getVGrammarView()) {\n compiler.getVGrammarView().updateLayoutTag();\n tag && renderNextTick && compiler.renderNextTick(morphConfig);\n }\n return this._layoutTag;\n }\n\n // 模块参数\n protected _modelOption: IModelOption;\n\n // 全局通道\n // protected _globalScale: { [key: string]: IBaseScale } = {};\n protected _globalScale: IGlobalScale;\n\n getGlobalScale() {\n return this._globalScale;\n }\n\n // mark & model 的 id 映射\n protected _idMap: Map<number, IModel | IMark> = new Map();\n\n protected _event: Event;\n getEvent() {\n return this._event;\n }\n\n // data\n protected _dataSet: DataSet;\n protected _chartData: ChartData;\n get chartData() {\n return this._chartData;\n }\n\n protected declare _option: IChartOption;\n\n // 模块内的需要动态影像图表的属性\n readonly state: ILayoutModelState = {\n layoutUpdateRank: 1\n };\n\n // stack\n\n padding: IPadding = { top: 0, left: 0, right: 0, bottom: 0 };\n protected _paddingSpec: ILayoutOrientPadding;\n\n protected _canvasRect: ILayoutRect;\n\n // background\n protected _backgroundMark: IRectMark;\n\n constructor(spec: T, option: IChartOption) {\n super(option);\n this._paddingSpec = normalizeLayoutPaddingSpec(spec.padding ?? option.getTheme().padding);\n\n this._event = new Event(option.eventDispatcher, option.mode);\n this._dataSet = option.dataSet;\n this._chartData = new ChartData(this._dataSet);\n this._modelOption = {\n ...option,\n mode: this._option.mode,\n map: this._idMap,\n getChartLayoutRect: () => this._layoutRect,\n getChartViewRect: () => this._viewRect,\n getChart: () => this,\n globalScale: this._globalScale,\n onError: this._option?.onError,\n disableTriggerEvent: this._option?.disableTriggerEvent === true,\n getSeriesData: this._chartData.getSeriesData.bind(this._chartData)\n };\n\n this._spec = spec;\n }\n\n created(transformer: Maybe<IChartSpecTransformer>) {\n // data\n this._chartData.parseData(this._spec.data);\n // scale\n this._createGlobalScale();\n // background\n this._createBackground();\n // 基础内容\n this._createLayout();\n // 基于spec 创建元素。\n // region\n transformer.forEachRegionInSpec(this._spec, this._createRegion.bind(this));\n // series\n transformer.forEachSeriesInSpec(this._spec, this._createSeries.bind(this));\n // components\n transformer.forEachComponentInSpec(this._spec, this._createComponent.bind(this), this._option.getSpecInfo());\n }\n\n init() {\n (this as any)._beforeInit?.();\n // 元素创建完毕后再执行各元素的初始化 方便各元素能获取到其他模块\n this._regions.forEach(r => r.init({}));\n this._series.forEach(s => s.init({}));\n this._components.forEach(c => c.init({ dataSet: this._dataSet }));\n\n // event\n this._initEvent();\n\n (this as any)._initStack?.();\n\n // data flow start\n this.reDataFlow();\n }\n\n reDataFlow() {\n this._series.forEach(s => s.getRawData()?.markRunning());\n this._series.forEach(s => s.fillData());\n this.updateGlobalScaleDomain();\n }\n\n onResize(width: number, height: number, reRender: boolean = true): void {\n const canvasRect = {\n width,\n height\n };\n this._canvasRect = canvasRect;\n this._updateLayoutRect(this._option.viewBox);\n this.setLayoutTag(true, null, reRender);\n }\n\n updateViewBox(viewBox: IBoundsLike, reLayout: boolean) {\n this._option.viewBox = viewBox;\n this._updateLayoutRect(viewBox);\n this.setLayoutTag(true, null, reLayout);\n }\n\n private _createBackground() {\n const bg = this._spec.background;\n if (!bg || typeof bg !== 'object' || isValid(bg.gradient)) {\n return;\n }\n const backgroundStyle = pickWithout(bg, ['x', 'y', 'width', 'height', 'x1', 'y1', 'image']);\n (backgroundStyle as any).background = (bg as any).image;\n\n this._backgroundMark = Factory.createMark(MarkTypeEnum.group, 'chart-background', {\n model: this as any,\n map: this._option.map,\n getCompiler: this.getCompiler,\n globalScale: this._globalScale\n }) as IRectMark;\n this._backgroundMark.created();\n this._backgroundMark.setStyle({\n ...backgroundStyle,\n x: () => this._viewBox.x1,\n y: () => this._viewBox.y1,\n width: () => this._viewBox.x2 - this._viewBox.x1,\n height: () => this._viewBox.y2 - this._viewBox.y1\n });\n this._backgroundMark.setMarkConfig({\n zIndex: LayoutZIndex.SeriesGroup - 2\n });\n }\n\n protected _createRegion(constructor: IRegionConstructor, specInfo: IModelSpecInfo) {\n if (!constructor) {\n return;\n }\n\n const { spec, ...others } = specInfo;\n const region = new constructor(spec, {\n ...this._modelOption,\n ...others\n });\n if (region) {\n region.created();\n this._regions.push(region);\n }\n }\n\n protected _createSeries(constructor: ISeriesConstructor, specInfo: IModelSpecInfo) {\n if (!constructor) {\n return;\n }\n\n const { spec, ...others } = specInfo;\n\n let region: IRegion | undefined;\n if (isValid(spec.regionId)) {\n region = this.getRegionsInUserId(spec.regionId);\n } else if (isValid(spec.regionIndex)) {\n region = this.getRegionsInIndex([spec.regionIndex])[0];\n }\n\n if (!region && !(region = this._regions[0])) {\n return;\n }\n\n const series = new constructor(spec, {\n ...this._modelOption,\n ...others,\n type: spec.type,\n region,\n globalScale: this._globalScale,\n sourceDataList: this._chartData.dataList\n });\n\n if (series) {\n series.created();\n this._series.push(series);\n region.addSeries(series);\n }\n }\n\n getAllSeries = (): ISeries[] => {\n return this._series ?? [];\n };\n\n getSeriesById(id: number): ISeries | undefined {\n return this._series.find(x => x.id === id);\n }\n\n protected _createComponent(constructor: IComponentConstructor, specInfo: IModelSpecInfo) {\n const component = constructor.createComponent(specInfo, {\n ...this._modelOption,\n type: constructor.type,\n getAllRegions: this.getAllRegions,\n getRegionsInIndex: this.getRegionsInIndex,\n getRegionsInIds: this.getRegionsInIds,\n getRegionsInUserIdOrIndex: this.getRegionsInUserIdOrIndex,\n getAllSeries: this.getAllSeries,\n getSeriesInIndex: this.getSeriesInIndex,\n getSeriesInIds: this.getSeriesInIds,\n getSeriesInUserIdOrIndex: this.getSeriesInUserIdOrIndex,\n getAllComponents: this.getComponents,\n getComponentByIndex: this.getComponentByIndex,\n getComponentByUserId: this.getComponentByUserId,\n getComponentsByKey: this.getComponentsByKey,\n getComponentsByType: this.getComponentsByType\n });\n if (!component) {\n return;\n }\n component.created();\n this._components.push(component);\n }\n\n getAllComponents(): IComponent[] {\n return this._components;\n }\n\n getAllModels(): IModel[] {\n return [].concat(this.getAllSeries(), this.getAllComponents(), this.getAllRegions());\n }\n\n getModelInFilter(filter: string | { type: string; index: number } | ((model: IModel) => boolean)) {\n if (isString(filter)) {\n return this.getAllModels().find(m => m.userId === filter);\n } else if (isFunction(filter)) {\n return this.getAllModels().find(m => filter(m));\n }\n let index = 0;\n return this.getAllModels().find(m => {\n if ((m.specKey ?? m.type) === filter.type) {\n if (index === filter.index) {\n return true;\n }\n index++;\n }\n return false;\n });\n }\n\n private _createLayout() {\n this._updateLayoutRect(this._option.viewBox);\n this._initLayoutFunc();\n }\n\n setLayout(layout: LayoutCallBack) {\n // 统一自定义 layout 到 option 中\n this._option.layout = layout;\n this._initLayoutFunc();\n }\n\n /** 可以通过设置 layout = null 来取消自定义布局。启用spec上的布局配置 */\n private _initLayoutFunc() {\n this._layoutFunc = this._option.layout;\n if (!this._layoutFunc) {\n // 判断是否使用3d的layout\n let use3dLayout = false;\n // 查找是否需要使用3d布局模块\n if ((this._spec as any).zField || (this._spec.series && this._spec.series.some((s: any) => s.zField))) {\n use3dLayout = true;\n }\n const constructor = Factory.getLayoutInKey(this._spec.layout?.type ?? (use3dLayout ? 'layout3d' : 'base'));\n if (constructor) {\n const layout = new constructor(this._spec.layout, {\n onError: this._option?.onError\n });\n this._layoutFunc = layout.layoutItems.bind(layout);\n }\n }\n }\n\n layout(params: ILayoutParams): void {\n this._option.performanceHook?.beforeLayoutWithSceneGraph?.();\n if (this.getLayoutTag()) {\n this._event.emit(ChartEvent.layoutStart, { chart: this, vchart: this._option.globalInstance });\n\n this.onLayoutStart(params);\n const elements = this.getLayoutElements();\n this._layoutFunc(this, elements, this._layoutRect, this._viewBox);\n this._event.emit(ChartEvent.afterLayout, { elements, chart: this });\n this.setLayoutTag(false);\n this.onLayoutEnd(params);\n\n this._event.emit(ChartEvent.layoutEnd, { chart: this, vchart: this._option.globalInstance });\n }\n this._option.performanceHook?.afterLayoutWithSceneGraph?.();\n }\n\n // 通知所有需要通知的元素 onLayout 钩子\n onLayoutStart(option: IChartLayoutOption) {\n const elements = this.getAllModels();\n elements.forEach(element => element.onLayoutStart(this._layoutRect, this._viewRect, option));\n }\n\n // 通知所有需要通知的元素 onLayoutEnd 钩子\n onLayoutEnd(option: IChartLayoutOption) {\n const elements = this.getAllModels();\n elements.forEach(element => {\n // series.onLayoutEnd will be called by region model\n if (element.modelType !== 'series') {\n element.onLayoutEnd(option);\n }\n });\n }\n\n onEvaluateEnd(option: IChartEvaluateOption) {\n const elements = [...this._components, ...this._regions, ...this._series];\n elements.forEach(element => element.onEvaluateEnd(option));\n }\n\n getLayoutElements(): ILayoutItem[] {\n return this.getAllModels()\n .map(i => i.layout)\n .filter(i => !!i);\n }\n\n // 区域\n getRegionsInIndex = (index?: number[]): IRegion[] => {\n if (!index || index.length === 0) {\n return [this._regions[0]];\n }\n return this._regions.filter((_r, i) => index.includes(i));\n };\n\n getAllRegions = () => {\n return this._regions;\n };\n\n getRegionsInIds = (ids: number[]): IRegion[] => {\n if (!ids) {\n return [];\n }\n return this._regions.filter(r => ids.includes(r.id));\n };\n\n getRegionsInQuerier = (region?: MaybeArray<IRegionQuerier>) => {\n if (region) {\n return this._regions.filter((r, index) => {\n return array(region).some(\n regionFilter =>\n (isValid(regionFilter.regionId) && regionFilter.regionId === r.userId) || regionFilter.regionIndex === index\n );\n });\n }\n return this._regions;\n };\n\n getRegionsInUserId = (userId: StringOrNumber): IRegion | undefined => {\n if (!userId) {\n return undefined;\n }\n return this._regions.find(r => r.userId === userId);\n };\n\n getRegionsInUserIdOrIndex = (user_ids?: StringOrNumber[], index?: number[]): IRegion[] => {\n const regions = this.getAllRegions();\n return regions.filter(r => {\n if (user_ids?.length) {\n return r.userId && user_ids.includes(r.userId);\n } else if (index?.length) {\n return index.includes(r.getSpecIndex());\n }\n return true;\n });\n };\n\n // 模块\n getComponents = () => {\n return this._components;\n };\n\n // 区域\n getSeriesInIndex = (index?: number[]): ISeries[] => {\n if (!index || index.length === 0) {\n return [this._series[0]];\n }\n return this._series.filter((_r, i) => index.includes(i));\n };\n\n getSeriesInIds = (ids?: number[]): ISeries[] => {\n if (!ids) {\n return [];\n }\n return this._series.filter(r => ids.includes(r.id));\n };\n\n getSeriesInUserId = (userId: StringOrNumber): ISeries | undefined => {\n if (!userId) {\n return undefined;\n }\n return this._series.find(r => r.userId === userId);\n };\n\n getSeriesInUserIdOrIndex = (user_ids?: StringOrNumber[], index?: number[]): ISeries[] => {\n const series = this.getAllSeries();\n return series.filter(s => {\n if (user_ids?.length) {\n return s.userId && user_ids.includes(s.userId);\n } else if (index?.length) {\n return index.includes(s.getSpecIndex());\n }\n return true;\n });\n };\n\n getComponentByIndex = (key: string, index: number) => {\n const components = this._components.filter(c => (c.specKey || c.type) === key);\n if (!components || components.length === 0) {\n return undefined;\n }\n return components[index];\n };\n\n getComponentsByKey = (key: string) => {\n return this._components.filter(c => (c.specKey || c.type) === key);\n };\n\n getComponentByUserId = (userId: StringOrNumber) => {\n const component = this._components.find(s => s.userId === userId);\n if (component) {\n return component;\n }\n return undefined;\n };\n\n getComponentsByType = (type: string) => {\n return this._components.filter(c => c.type === type);\n };\n\n getModelById(id: number): IModel | undefined {\n const model = this._idMap.get(id);\n if (model && model instanceof BaseModel) {\n return model;\n }\n return undefined;\n }\n\n getModelByUserId(userId: StringOrNumber): IModel | undefined {\n // TODO: 考虑通过 map 结构优化获取方式 & 补充所有 model 的寻找方法\n const series = this.getSeriesInUserId(userId);\n if (series) {\n return series;\n }\n const region = this.getRegionsInUserId(userId);\n if (region) {\n return region;\n }\n const component = this.getComponentByUserId(userId);\n if (component) {\n return component;\n }\n return undefined;\n }\n\n getAllMarks(): IMark[] {\n const items = Array.from(this._idMap.values());\n return items.filter(item => item && item instanceof BaseMark) as IMark[];\n }\n\n getMarkById(id: number): IMark | undefined {\n const mark = this._idMap.get(id);\n if (mark && mark instanceof BaseMark) {\n return mark as IMark;\n }\n return undefined;\n }\n\n getMarkByUserName(name: string): IMark[] {\n return this.getAllMarks().filter(m => m.name && m.name === name);\n }\n\n updateData(id: StringOrNumber, data: unknown, updateGlobalScale: boolean = true, options?: IParserOptions) {\n const dv = this._dataSet.getDataView(id as string);\n if (dv) {\n dv.markRunning();\n dv.parseNewData(data, options);\n }\n\n if (updateGlobalScale) {\n this.updateGlobalScaleDomain();\n }\n this.getAllModels().forEach(model => model.onDataUpdate());\n }\n\n updateFullData(data: IDataValues | IDataValues[], updateGlobalScale: boolean = true) {\n array(data).forEach(d => {\n const dv = this._dataSet.getDataView(d.id);\n if (dv) {\n dv.markRunning();\n }\n });\n array(data).forEach(d => {\n const dv = this._dataSet.getDataView(d.id);\n if (dv) {\n updateDataViewInData(dv, d, true);\n }\n });\n if (updateGlobalScale) {\n this.updateGlobalScaleDomain();\n }\n this.getAllModels().forEach(model => model.onDataUpdate());\n }\n\n onRender(option: IChartRenderOption) {\n // do nothing\n }\n\n setCanvasRect(width: number, height: number) {\n this._canvasRect = { width, height };\n }\n\n getCanvasRect(): Omit<IRect, 'x' | 'y'> {\n if (this._canvasRect) {\n return this._canvasRect;\n }\n\n this._canvasRect = calculateChartSize(this._spec, this._option, {\n width: DEFAULT_CHART_WIDTH,\n height: DEFAULT_CHART_HEIGHT\n });\n\n return this._canvasRect;\n }\n\n getSeriesData(id: StringOrNumber | undefined, index: number | undefined): DataView | undefined {\n return this._chartData.getSeriesData(id, index);\n }\n\n private _transformSpecScale() {\n const scales: IChartSpec['scales'] = this._spec.scales ? [...this._spec.scales] : [];\n let colorScaleSpec: IVisualSpecScale<any, any> = scales.find(s => s.id === 'color');\n const colorScheme = this.getColorScheme();\n if (!colorScaleSpec) {\n colorScaleSpec = {\n type: 'ordinal',\n id: 'color',\n domain: null,\n range: null\n };\n scales.push(colorScaleSpec);\n if (this._spec.color) {\n const colorSpec = this._spec.color as string[] | IVisual<string>;\n\n // range array\n if (isArray(colorSpec)) {\n colorScaleSpec.range = colorSpec;\n } else {\n const tempSpec = colorSpec as IVisualSpecScale<any, any>;\n Object.prototype.hasOwnProperty.call(tempSpec, 'type') && (colorScaleSpec.type = tempSpec.type);\n Object.prototype.hasOwnProperty.call(tempSpec, 'domain') && (colorScaleSpec.domain = tempSpec.domain);\n Object.prototype.hasOwnProperty.call(tempSpec, 'range') && (colorScaleSpec.range = tempSpec.range);\n Object.prototype.hasOwnProperty.call(tempSpec, 'specified') &&\n (colorScaleSpec.specified = tempSpec.specified);\n Object.prototype.hasOwnProperty.call(tempSpec, 'clamp') && (colorScaleSpec.clamp = tempSpec.clamp);\n }\n }\n }\n // 如果没有range设置\n // length === 0 就认为是没有配置,用户配置 color: [] 依然认为是无效配置,启用主题色板\n if (!colorScaleSpec.range?.length) {\n colorScaleSpec.range = getDataScheme(colorScheme);\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n colorScaleSpec.rangeTheme = true;\n }\n return scales;\n }\n\n // 全局通道\n private _createGlobalScale() {\n this._globalScale = new GlobalScale(this._transformSpecScale(), this);\n this._modelOption.globalScale = this._globalScale;\n }\n\n updateGlobalScaleDomain() {\n const domainSet = new Set();\n this._series.forEach(s => {\n const keys = s.getSeriesKeys();\n keys && keys.forEach(k => domainSet.add(k));\n });\n // domain\n const domain = Array.from(domainSet);\n // 如果 global scale 当前没有 domain 的话,就使用这个domain\n // 整理了目前会影响全局 scale 的逻辑,但是当前这个节点使用这个逻辑可行\n // 但是考虑到组件也可能会有修改 scale 的逻辑\n // 增加一个属性设置优先级也许是必须的?\n this._globalScale.updateScaleDomain(domain);\n }\n\n updateGlobalScale(result: IUpdateSpecResult) {\n mergeUpdateResult(result, this._globalScale.updateSpec(this._transformSpecScale()));\n }\n\n updateGlobalScaleTheme() {\n const colorSpec = this._globalScale.getScaleSpec('color');\n const colorScheme = this.getColorScheme();\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n if (colorSpec.rangeTheme) {\n colorSpec.range = getDataScheme(colorScheme);\n this._globalScale.getScale('color').range(colorSpec.range);\n }\n }\n\n private _getSpecKeys(spec: T) {\n const ignoreKeys: Record<string, boolean> = { width: true, height: true };\n return Object.keys(spec)\n .filter(key => !ignoreKeys[key])\n .sort();\n }\n\n updateSpec(spec: T) {\n const result = {\n change: false,\n reMake: false,\n reRender: false,\n reSize: false,\n reCompile: false\n };\n // 需要重新布局\n this.setLayoutTag(true, null, false);\n // 第一版简易逻辑如果配置项出现增删,直接重新创建chart\n // 如果出现类型不同,同上\n if (spec.type !== this.type) {\n result.reMake = true;\n return result;\n }\n // spec set & transformSpec\n // diff meta length;\n\n const currentKeys = this._getSpecKeys(this._spec);\n const nextKeys = this._getSpecKeys(spec);\n if (!isEqual(currentKeys, nextKeys)) {\n result.reMake = true;\n return result;\n }\n // spec key 的个数一致,但是数组长度不一致时。remake\n for (let i = 0; i < currentKeys.length; i++) {\n const key = currentKeys[i];\n if (isArray((this._spec as any)[key]) && (this._spec as any)[key].length !== array((spec as any)[key]).length) {\n result.reMake = true;\n return result;\n }\n }\n const oldSpec = this._spec;\n this._spec = spec;\n // update chart config\n this.updateChartConfig(result, oldSpec);\n if (result.reMake) {\n return result;\n }\n\n this.updateGlobalScale(result);\n if (result.reMake) {\n return result;\n }\n // region 变化\n this.updateRegionSpec(result);\n if (result.reMake) {\n return result;\n }\n this.updateComponentSpec(result);\n if (result.reMake) {\n return result;\n }\n this.updateSeriesSpec(result);\n if (result.reMake) {\n return result;\n }\n /**\n * 当图表不是`remake`,而是部分更新的时候,所有的model需要`reInit`\n * 由于 data 最终是挂在到model上的,data的transform又依赖model中的`spec`,\n * 所以在更新model前需要调用`reInit`确保`spec`和内部变量已经更新\n */\n this.reInit();\n this.updateDataSpec();\n // ensure that the domain of the scale follows the data change\n this.updateGlobalScaleDomain();\n return result;\n }\n\n updateChartConfig(result: IUpdateSpecResult, oldSpec: IChartSpec) {\n // padding;\n this._paddingSpec = normalizeLayoutPaddingSpec(this._spec.padding ?? this._option?.getTheme().padding);\n\n // re compute padding & layout\n this._updateLayoutRect(this._viewBox);\n }\n\n updateDataSpec() {\n if (!this._spec.data) {\n return;\n }\n this._chartData.updateData(this._spec.data, false, true);\n }\n\n updateRegionSpec(result: IUpdateSpecResult) {\n if (!this._spec?.region) {\n return;\n }\n // 长度不同,直接判定为 remake\n if (this._spec.region.length !== this._regions.length) {\n result.reMake = true;\n return;\n }\n this._regions.forEach(r => {\n mergeUpdateResult(result, r.updateSpec(this._spec.region[r.getSpecIndex()]));\n });\n }\n\n updateComponentSpec(result: IUpdateSpecResult) {\n // 用来检测组件是否有新增\n const componentCache: {\n [key in string]: {\n specCount: number;\n componentCount: number;\n };\n } = {};\n const checkVisibleComponents: Record<string, boolean> = {\n [ComponentTypeEnum.title]: true,\n [ComponentTypeEnum.brush]: true,\n [ComponentTypeEnum.mapLabel]: true,\n [ComponentTypeEnum.indicator]: true\n };\n\n this._components.forEach(c => {\n if (c.type === ComponentTypeEnum.label || c.type === ComponentTypeEnum.totalLabel) {\n // label配置都会被解析到series中,所以不适合放在这里进行比对\n return;\n }\n if (checkVisibleComponents[c.type]) {\n checkVisibleComponents[c.type] = false;\n }\n\n const compSpecKey = c.specKey || c.type;\n // 每一个组件获取对应的speck\n const cmpSpec = (this._spec as any)[compSpecKey] ?? {};\n\n if (isArray(cmpSpec)) {\n componentCache[compSpecKey] = componentCache[compSpecKey] || {\n specCount: cmpSpec.length,\n componentCount: 0\n };\n componentCache[compSpecKey].componentCount++;\n mergeUpdateResult(result, c.updateSpec(cmpSpec[c.getSpecIndex()] ?? {}, cmpSpec));\n } else {\n mergeUpdateResult(result, c.updateSpec(cmpSpec));\n }\n });\n for (const key in componentCache) {\n if (Object.prototype.hasOwnProperty.call(componentCache, key)) {\n const element = componentCache[key];\n if (element.componentCount !== element.specCount) {\n result.reMake = true;\n }\n }\n }\n\n /** 这些组件 visible: false 不创建组件,也在this._components中,所以需要额外检测是否有visible 的切换 */\n const isVisible = (compSpec: any) => compSpec && compSpec.visible !== false;\n Object.keys(checkVisibleComponents).forEach(type => {\n if (checkVisibleComponents[type]) {\n const compSpec = (this._spec as any)[type];\n const switchToVisible = isArray(compSpec) ? compSpec.some(isVisible) : isVisible(compSpec);\n\n if (switchToVisible) {\n result.reMake = true;\n }\n }\n });\n }\n\n updateSeriesSpec(result: IUpdateSpecResult) {\n // 长度不同,直接判定为 remake\n if (this._spec.series.length !== this._series.length) {\n result.reMake = true;\n return;\n }\n this._series.forEach(s => {\n const spec = this._spec.series[s.getSpecIndex()];\n mergeUpdateResult(result, s.updateSpec(spec));\n });\n }\n\n getCanvas() {\n return this.getCompiler()?.getCanvas() ?? null;\n }\n\n private _updateLayoutRect(viewBox: IBoundsLike) {\n const canvasRect = this.getCanvasRect();\n let viewRect = canvasRect;\n if (viewBox) {\n this._viewBox = viewBox;\n const { x1 = 0, y1 = 0, x2, y2 } = viewBox;\n viewRect = {\n width: x2 - x1,\n height: y2 - y1\n };\n } else {\n this._viewBox = { x1: 0, y1: 0, x2: viewRect.width, y2: viewRect.height };\n }\n this._viewRect = viewRect;\n // resize 时 padding 也应该会发生变化 先计算\n this.padding = calcPadding(this._paddingSpec, viewRect, viewRect);\n this._layoutRect.width = viewRect.width - this.padding.left - this.padding.right;\n this._layoutRect.height = viewRect.height - this.padding.top - this.padding.bottom;\n this._layoutRect.x = this.padding.left;\n this._layoutRect.y = this.padding.top;\n\n this._event.emit(ChartEvent.layoutRectUpdate, { chart: this });\n }\n\n /** 设置当前全局主题 */\n setCurrentTheme() {\n // update chart config\n this.updateChartConfig({ change: true, reMake: false }, this._spec);\n\n // 需要重新布局\n this.setLayoutTag(true, null, false);\n\n // 设置色板,只设置 colorScale 的 range\n this.updateGlobalScaleTheme();\n this.reInit();\n }\n\n reInit() {\n [...this._regions, ...this._series, ...this._components].forEach(model => {\n const specInfo = model.getSpecInfo();\n\n if (specInfo && specInfo.spec) {\n // 找不到,说明在更新spec中,组件被注销了\n model.reInit(specInfo.spec);\n }\n });\n }\n\n clear() {\n // call on recompile & release\n this.getAllModels().forEach(i => i.clear?.());\n }\n\n compile() {\n this.compileBackground();\n this.compileLayout();\n this.compileRegions();\n this.compileSeries();\n this.compileComponents();\n }\n\n afterCompile() {\n this.getAllRegions().forEach(r => {\n r.afterCompile?.();\n });\n this.getAllSeries().forEach(s => {\n s.afterCompile?.();\n });\n this.getAllComponents().forEach(c => {\n c.afterCompile?.();\n });\n }\n\n compileLayout() {\n const { width, height } = this.getCanvasRect();\n this.getCompiler().setSize(width, height);\n }\n\n compileBackground() {\n if (!this._backgroundMark) {\n return;\n }\n this._backgroundMark.compile({ context: { model: this } });\n this._backgroundMark.getProduct()?.layout(() => {\n // console.log('region mark layout');\n });\n }\n\n compileRegions() {\n this._option.performanceHook?.beforeRegionCompile?.();\n this.getAllRegions().forEach(r => {\n r.compile();\n });\n this._option.performanceHook?.afterRegionCompile?.();\n }\n\n compileSeries() {\n this._option.performanceHook?.beforeSeriesCompile?.();\n this.getAllSeries().forEach(s => {\n s.compile();\n });\n this._option.performanceHook?.afterSeriesCompile?.();\n }\n\n compileComponents() {\n this._option.performanceHook?.beforeComponentCompile?.();\n this.getAllComponents().forEach(c => {\n c.compile();\n });\n this._option.performanceHook?.afterComponentCompile?.();\n }\n\n release() {\n /* release 前的处理 */\n [...this._components, ...this._regions, ...this._series].forEach(m => {\n m.beforeRelease();\n });\n\n /* 开始 release */\n super.release();\n // clear event , temporary function of chart items\n this.clear();\n\n [...this._components, ...this._regions, ...this._series].forEach(m => {\n m.release();\n });\n this._components = this._regions = this._series = [];\n this._spec = {} as any;\n // FIXME: type lint\n this._dataSet = this._globalScale = this._layoutFunc = null as unknown as any;\n this._layoutTag = false;\n this._idMap.clear();\n }\n\n onLayout(srView: IView) {\n const root = srView.rootMark;\n this.layout({ group: root, srView });\n }\n\n /**\n * 更新或设置图元状态\n * @param state 状态筛选器\n * @param filter 筛选器\n */\n updateState(\n state: Record<string, Omit<IMarkStateSpec<unknown>, 'style'>>,\n filter?: (series: ISeries, mark: IMark, stateKey: string) => boolean //series + mark 筛选\n ): void {\n const seriesArr = this.getAllSeries();\n for (const key in state) {\n if (isEmpty(state[key])) {\n continue;\n }\n const stateSpec = state[key];\n let stateInfo: IStateInfo = { stateValue: key };\n if (isFunction(stateSpec.filter)) {\n stateInfo = { filter: stateSpec.filter, ...stateInfo };\n } else {\n stateInfo = { ...stateSpec.filter, ...stateInfo };\n }\n if (stateSpec.level) {\n stateInfo.level = stateSpec.level;\n }\n seriesArr.forEach(series => {\n series.getMarks().forEach(m => {\n if (!m.stateStyle[key]) {\n return;\n }\n if (!filter || filter(series, m, key)) {\n m.state.changeStateInfo(stateInfo);\n m.updateMarkState(key);\n }\n });\n });\n }\n }\n\n /**\n * 更新图元选中状态\n * @param datum hover 图元数据\n * @param filter 筛选器 用来筛选系列与mark\n * @param region region 筛选器\n */\n setSelected(\n datum: MaybeArray<any> | null,\n filter?: (series: ISeries, mark: IMark) => boolean,\n region?: IRegionQuerier\n ): void {\n this._setStateInDatum(STATE_VALUE_ENUM.STATE_SELECTED, true, datum, filter, region);\n }\n\n /**\n * 更新图元 hover 状态\n * @param datum hover 图元数据\n * @param filter 筛选器 用来筛选系列与mark\n * @param region region 筛选器\n */\n setHovered(\n datum: MaybeArray<Datum> | null,\n filter?: (series: ISeries, mark: IMark) => boolean,\n region?: IRegionQuerier\n ): void {\n this._setStateInDatum(STATE_VALUE_ENUM.STATE_HOVER, true, datum, filter, region);\n }\n\n /**\n * 清除所有图元的状态\n *\n * @since 1.11.0\n */\n clearState(state: string) {\n this.getAllRegions().forEach(r => {\n r.interaction.clearEventElement(state, true);\n r.interaction.resetInteraction(state, null);\n return;\n });\n }\n\n /**\n * 清除所有图元的所有状态\n *\n * @since 1.12.4\n */\n clearAllStates() {\n this.getAllRegions().forEach(r => {\n r.interaction.clearAllEventElement();\n r.interaction.resetAllInteraction();\n return;\n });\n }\n\n /**\n * 清除所有图元的选中状态\n *\n * @since 1.11.0\n */\n clearSelected() {\n this.clearState(STATE_VALUE_ENUM.STATE_SELECTED);\n }\n\n /**\n * 清除所有图元的hover状态\n *\n * @since 1.11.0\n */\n clearHovered() {\n this.clearState(STATE_VALUE_ENUM.STATE_HOVER);\n }\n\n private _initEvent() {\n [ChartEvent.dataZoomChange, ChartEvent.scrollBarChange].forEach(event => {\n this._event.on(event, ({ value }) => {\n this._disableMarkAnimation(['exit', 'update']);\n const enableMarkAnimate = () => {\n this._enableMarkAnimation(['exit', 'update']);\n this._event.off(VGRAMMAR_HOOK_EVENT.AFTER_MARK_RENDER_END, enableMarkAnimate);\n };\n this._event.on(VGRAMMAR_HOOK_EVENT.AFTER_MARK_RENDER_END, enableMarkAnimate);\n });\n });\n }\n\n protected _enableMarkAnimation(states: string | string[]) {\n const marks = this.getAllMarks();\n marks.forEach(mark => {\n const product = mark.getProduct();\n if (product && product.animate) {\n product.animate.enableAnimationState(states);\n }\n });\n }\n\n protected _disableMarkAnimation(states: string | string[]) {\n const marks = this.getAllMarks();\n marks.forEach(mark => {\n const product = mark.getProduct();\n if (product && product.animate) {\n product.animate.disableAnimationState(states);\n }\n });\n }\n\n protected _setStateInDatum(\n stateKey: string,\n checkReverse: boolean,\n datum: MaybeArray<Datum> | null,\n filter?: (series: ISeries, mark: IMark) => boolean,\n region?: IRegionQuerier\n ) {\n datum = datum ? array(datum) : null;\n const keys = !datum ? null : Object.keys(datum[0]);\n this.getRegionsInQuerier(region).forEach(r => {\n if (!datum) {\n r.interaction.clearEventElement(stateKey, true);\n return;\n }\n r.getSeries().forEach(s => {\n s.getMarks().forEach(m => {\n if (!m.getProduct()) {\n return;\n }\n if (!filter || (isFunction(filter) && filter(s, m))) {\n const isCollect = m.getProduct().isCollectionMark();\n const elements = m.getProduct().elements;\n let pickElements = [] as IElement[];\n if (isCollect) {\n pickElements = elements.filter(e => {\n const elDatum = e.getDatum();\n // eslint-disable-next-line max-nested-callbacks, eqeqeq\n (datum as Datum[]).every((d, index) => keys.every(k => d[k] == elDatum[index][k]));\n });\n } else {\n if (datum.length > 1) {\n const datumTemp = (datum as Datum[]).slice();\n pickElements = elements.filter(e => {\n if (datumTemp.length === 0) {\n return false;\n }\n const elDatum = e.getDatum();\n // eslint-disable-next-line max-nested-callbacks, eqeqeq\n const index = datumTemp.findIndex(d => keys.every(k => d[k] == elDatum[k]));\n if (index >= 0) {\n datumTemp.splice(index, 1);\n return true;\n }\n return false;\n });\n } else {\n // eslint-disable-next-line eqeqeq\n const el = elements.find(e => keys.every(k => datum[0][k] == e.getDatum()[k]));\n el && (pickElements = [el]);\n }\n }\n pickElements.forEach(element => {\n r.interaction.startInteraction(stateKey, element);\n });\n }\n });\n });\n if (checkReverse) {\n r.interaction.reverseEventElement(stateKey);\n }\n });\n }\n\n /**\n * setDimensionIndex could trigger mark state, tooltip, crosshair\n * @param value dimension value\n * @param opt option for set trigger\n */\n setDimensionIndex(value: StringOrNumber, opt: DimensionIndexOption) {\n // event\n let dimensionInfo: IDimensionInfo[] | null = null;\n Array.from(this._event.getComposedEventMap().values()).forEach(e => {\n const { eventType, event } = e;\n if (eventType === DimensionEventEnum.dimensionHover || eventType === DimensionEventEnum.dimensionClick) {\n const info = event.dispatch(value, opt) as [];\n if (info?.length) {\n dimensionInfo = info;\n }\n }\n });\n const isUnableValue =\n isNil(value) || !dimensionInfo || dimensionInfo.every(d => isDiscrete(d.axis.getScale().type) && isNil(d.index));\n // tooltip\n if (opt.tooltip !== false) {\n const tooltip = this.getComponentsByType(ComponentTypeEnum.tooltip)[0] as unknown as ITooltip;\n\n if (tooltip?.getVisible()) {\n if (isUnableValue) {\n (<any>tooltip).hideTooltip?.();\n } else {\n const dataFilter = {};\n dimensionInfo.forEach((d: IDimensionInfo) => {\n const { axis, value, data } = d;\n const isY = axis.getOrient() === 'left' || axis.getOrient() === 'right';\n data.forEach(d => {\n const field = isY ? (<ICartesianSeries>d.series).fieldY[0] : (<ICartesianSeries>d.series).fieldX[0];\n\n dataFilter[field] = d.datum?.[0]?.[field] ?? value;\n });\n });\n tooltip.showTooltip(dataFilter, opt.showTooltipOption);\n }\n }\n }\n if (opt.crosshair !== false) {\n const crosshair = this.getComponentsByType(ComponentTypeEnum.cartesianCrosshair)[0] as unknown as ICrossHair;\n\n if (crosshair && crosshair.clearAxisValue && crosshair.setAxisValue) {\n if (isUnableValue) {\n crosshair.hideCrosshair();\n } else {\n crosshair.showCrosshair(dimensionInfo as { axis: IAxis; value: string | number }[]);\n }\n }\n }\n }\n\n getColorScheme() {\n return this._option.getTheme?.().colorScheme;\n }\n}\n"]}
@@ -1,4 +1,3 @@
1
- import type { IEvent } from '../../event/interface';
2
1
  import type { LayoutCallBack } from '../../layout/interface';
3
2
  import type { IView } from '@visactor/vgrammar-core';
4
3
  import type { IParserOptions } from '@visactor/vdataset';
@@ -14,6 +13,7 @@ import type { IRegionQuerier, MaybeArray, Datum, IMarkStateSpec, StringOrNumber,
14
13
  import type { DataView } from '@visactor/vdataset';
15
14
  import type { IGlobalScale } from '../../scale/interface';
16
15
  import type { IMorphConfig } from '../../animation/spec';
16
+ import { Event } from '../../event';
17
17
  export type DimensionIndexOption = {
18
18
  filter?: (cmp: IComponent) => boolean;
19
19
  tooltip?: boolean;
@@ -37,7 +37,7 @@ export interface IChart extends ICompilable {
37
37
  getCanvasRect: () => ILayoutRect;
38
38
  getViewRect: () => ILayoutRect;
39
39
  getOption: () => IChartOption;
40
- getEvent: () => IEvent;
40
+ getEvent: () => Event;
41
41
  getGlobalScale: () => IGlobalScale;
42
42
  setLayout: (layout: LayoutCallBack) => void;
43
43
  layout: (context: ILayoutParams) => void;