@visactor/vchart 1.5.2 → 1.5.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (297) hide show
  1. package/build/es5/index.js +1 -1
  2. package/build/index.js +655 -504
  3. package/build/index.min.js +1 -1
  4. package/build/tsconfig.tsbuildinfo +1 -1
  5. package/cjs/chart/base-chart.d.ts +4 -6
  6. package/cjs/chart/base-chart.js +44 -45
  7. package/cjs/chart/base-chart.js.map +1 -1
  8. package/cjs/chart/gauge/gauge.js +3 -2
  9. package/cjs/chart/gauge/gauge.js.map +1 -1
  10. package/cjs/chart/interface/chart.d.ts +3 -3
  11. package/cjs/chart/interface/chart.js.map +1 -1
  12. package/cjs/chart/sequence/sequence.js +0 -1
  13. package/cjs/chart/sequence/sequence.js.map +1 -1
  14. package/cjs/chart/stack.js +1 -2
  15. package/cjs/component/axis/cartesian/linear-axis.js.map +1 -1
  16. package/cjs/component/axis/polar/interface/common.d.ts +1 -0
  17. package/cjs/component/axis/polar/interface/common.js.map +1 -1
  18. package/cjs/component/axis/util.d.ts +3 -3
  19. package/cjs/component/axis/util.js +14 -10
  20. package/cjs/component/axis/util.js.map +1 -1
  21. package/cjs/component/base/base-component.d.ts +1 -2
  22. package/cjs/component/base/base-component.js +2 -39
  23. package/cjs/component/base/base-component.js.map +1 -1
  24. package/cjs/component/base/util.d.ts +2 -3
  25. package/cjs/component/base/util.js +16 -19
  26. package/cjs/component/base/util.js.map +1 -1
  27. package/cjs/component/brush/brush.js +1 -1
  28. package/cjs/component/brush/brush.js.map +1 -1
  29. package/cjs/component/common/trigger/config.d.ts +19 -49
  30. package/cjs/component/common/trigger/config.js +9 -37
  31. package/cjs/component/common/trigger/config.js.map +1 -1
  32. package/cjs/component/crosshair/base.js +14 -11
  33. package/cjs/component/crosshair/base.js.map +1 -1
  34. package/cjs/component/crosshair/config.d.ts +11 -31
  35. package/cjs/component/crosshair/config.js +9 -26
  36. package/cjs/component/crosshair/config.js.map +1 -1
  37. package/cjs/component/crosshair/util.d.ts +3 -3
  38. package/cjs/component/crosshair/util.js +7 -5
  39. package/cjs/component/crosshair/util.js.map +1 -1
  40. package/cjs/component/index.js +2 -1
  41. package/cjs/component/tooltip/handler/base.js +6 -6
  42. package/cjs/component/tooltip/handler/base.js.map +1 -1
  43. package/cjs/component/tooltip/handler/utils/attribute.d.ts +3 -3
  44. package/cjs/component/tooltip/handler/utils/attribute.js.map +1 -1
  45. package/cjs/component/util.d.ts +4 -0
  46. package/cjs/component/util.js +14 -0
  47. package/cjs/component/util.js.map +1 -0
  48. package/cjs/constant/waterfall.js +1 -2
  49. package/cjs/constant/word-cloud.js +2 -1
  50. package/cjs/core/index.d.ts +1 -1
  51. package/cjs/core/index.js +1 -1
  52. package/cjs/core/index.js.map +1 -1
  53. package/cjs/core/interface.d.ts +7 -1
  54. package/cjs/core/interface.js.map +1 -1
  55. package/cjs/core/vchart.d.ts +3 -2
  56. package/cjs/core/vchart.js +52 -47
  57. package/cjs/core/vchart.js.map +1 -1
  58. package/cjs/data/transforms/sankey.d.ts +1 -0
  59. package/cjs/data/transforms/sankey.js +16 -3
  60. package/cjs/data/transforms/sankey.js.map +1 -1
  61. package/cjs/interaction/config.d.ts +17 -52
  62. package/cjs/interaction/config.js +9 -42
  63. package/cjs/interaction/config.js.map +1 -1
  64. package/cjs/interaction/dimension-trigger.js +2 -1
  65. package/cjs/interaction/drill/drillable.js +1 -1
  66. package/cjs/interaction/drill/drillable.js.map +1 -1
  67. package/cjs/interaction/trigger.js +1 -1
  68. package/cjs/interaction/trigger.js.map +1 -1
  69. package/cjs/interaction/zoom/zoomable.js +8 -8
  70. package/cjs/interaction/zoom/zoomable.js.map +1 -1
  71. package/cjs/layout/base-layout.js +1 -1
  72. package/cjs/layout/index.js +1 -1
  73. package/cjs/layout/interface.js +1 -1
  74. package/cjs/mark/arc-3d.js +1 -1
  75. package/cjs/mark/arc.js +1 -1
  76. package/cjs/mark/area.js +1 -1
  77. package/cjs/mark/base/base-mark.js +4 -5
  78. package/cjs/mark/base/base-mark.js.map +1 -1
  79. package/cjs/mark/box-plot.js +1 -1
  80. package/cjs/model/base-model.d.ts +4 -2
  81. package/cjs/model/base-model.js +51 -11
  82. package/cjs/model/base-model.js.map +1 -1
  83. package/cjs/model/interface.d.ts +10 -3
  84. package/cjs/model/interface.js.map +1 -1
  85. package/cjs/series/area/area.d.ts +1 -1
  86. package/cjs/series/area/area.js +1 -1
  87. package/cjs/series/area/area.js.map +1 -1
  88. package/cjs/series/bar/bar.d.ts +1 -1
  89. package/cjs/series/bar/bar.js +1 -1
  90. package/cjs/series/bar/bar.js.map +1 -1
  91. package/cjs/series/base/base-series.d.ts +4 -3
  92. package/cjs/series/base/base-series.js +12 -46
  93. package/cjs/series/base/base-series.js.map +1 -1
  94. package/cjs/series/cartesian/cartesian.d.ts +3 -0
  95. package/cjs/series/cartesian/cartesian.js +5 -2
  96. package/cjs/series/cartesian/cartesian.js.map +1 -1
  97. package/cjs/series/dot/dot.js +3 -4
  98. package/cjs/series/dot/dot.js.map +1 -1
  99. package/cjs/series/gauge/gauge-pointer.d.ts +1 -0
  100. package/cjs/series/gauge/gauge-pointer.js +1 -1
  101. package/cjs/series/gauge/gauge-pointer.js.map +1 -1
  102. package/cjs/series/heatmap/heatmap.js +1 -1
  103. package/cjs/series/heatmap/heatmap.js.map +1 -1
  104. package/cjs/series/interface/theme.d.ts +2 -0
  105. package/cjs/series/interface/theme.js +3 -2
  106. package/cjs/series/interface/theme.js.map +1 -1
  107. package/cjs/series/link/link.js +1 -1
  108. package/cjs/series/link/link.js.map +1 -1
  109. package/cjs/series/map/map.js +1 -1
  110. package/cjs/series/map/map.js.map +1 -1
  111. package/cjs/series/polar/polar.d.ts +1 -0
  112. package/cjs/series/polar/polar.js +3 -1
  113. package/cjs/series/polar/polar.js.map +1 -1
  114. package/cjs/series/polar/progress-like/progress-like.d.ts +1 -1
  115. package/cjs/series/polar/progress-like/progress-like.js +2 -3
  116. package/cjs/series/polar/progress-like/progress-like.js.map +1 -1
  117. package/cjs/series/progress/circular/circular.js +4 -4
  118. package/cjs/series/progress/circular/circular.js.map +1 -1
  119. package/cjs/series/range-area/interface.d.ts +2 -1
  120. package/cjs/series/range-area/interface.js.map +1 -1
  121. package/cjs/series/rose/rose.d.ts +1 -1
  122. package/cjs/series/rose/rose.js +2 -2
  123. package/cjs/series/rose/rose.js.map +1 -1
  124. package/cjs/series/sankey/sankey.js +20 -17
  125. package/cjs/series/sankey/sankey.js.map +1 -1
  126. package/cjs/series/scatter/scatter.d.ts +1 -2
  127. package/cjs/series/scatter/scatter.js +1 -3
  128. package/cjs/series/scatter/scatter.js.map +1 -1
  129. package/cjs/series/waterfall/waterfall.d.ts +1 -1
  130. package/cjs/series/waterfall/waterfall.js +3 -3
  131. package/cjs/series/waterfall/waterfall.js.map +1 -1
  132. package/cjs/series/word-cloud/base.js +34 -35
  133. package/cjs/series/word-cloud/base.js.map +1 -1
  134. package/cjs/series/word-cloud/word-cloud-3d.js +32 -32
  135. package/cjs/series/word-cloud/word-cloud-3d.js.map +1 -1
  136. package/cjs/theme/builtin/index.d.ts +4 -1
  137. package/cjs/theme/builtin/index.js +13 -8
  138. package/cjs/theme/builtin/index.js.map +1 -1
  139. package/cjs/theme/color-scheme/util.js +2 -1
  140. package/cjs/theme/color-scheme/util.js.map +1 -1
  141. package/cjs/theme/theme-manager.js +4 -3
  142. package/cjs/theme/theme-manager.js.map +1 -1
  143. package/cjs/theme/util.d.ts +5 -0
  144. package/cjs/theme/util.js +34 -0
  145. package/cjs/theme/util.js.map +1 -0
  146. package/cjs/util/spec/merge-theme.d.ts +4 -1
  147. package/cjs/util/spec/merge-theme.js +22 -13
  148. package/cjs/util/spec/merge-theme.js.map +1 -1
  149. package/cjs/util/spec/preprocess.js +1 -0
  150. package/cjs/util/spec/preprocess.js.map +1 -1
  151. package/esm/chart/base-chart.d.ts +4 -6
  152. package/esm/chart/base-chart.js +42 -42
  153. package/esm/chart/base-chart.js.map +1 -1
  154. package/esm/chart/gauge/gauge.js +3 -2
  155. package/esm/chart/gauge/gauge.js.map +1 -1
  156. package/esm/chart/interface/chart.d.ts +3 -3
  157. package/esm/chart/interface/chart.js.map +1 -1
  158. package/esm/chart/sequence/sequence.js +0 -1
  159. package/esm/chart/sequence/sequence.js.map +1 -1
  160. package/esm/chart/stack.js +1 -2
  161. package/esm/component/axis/cartesian/linear-axis.js.map +1 -1
  162. package/esm/component/axis/polar/interface/common.d.ts +1 -0
  163. package/esm/component/axis/polar/interface/common.js.map +1 -1
  164. package/esm/component/axis/util.d.ts +3 -3
  165. package/esm/component/axis/util.js +10 -8
  166. package/esm/component/axis/util.js.map +1 -1
  167. package/esm/component/base/base-component.d.ts +1 -2
  168. package/esm/component/base/base-component.js +3 -40
  169. package/esm/component/base/base-component.js.map +1 -1
  170. package/esm/component/base/util.d.ts +2 -3
  171. package/esm/component/base/util.js +19 -16
  172. package/esm/component/base/util.js.map +1 -1
  173. package/esm/component/brush/brush.js +1 -1
  174. package/esm/component/brush/brush.js.map +1 -1
  175. package/esm/component/common/trigger/config.d.ts +19 -49
  176. package/esm/component/common/trigger/config.js +7 -35
  177. package/esm/component/common/trigger/config.js.map +1 -1
  178. package/esm/component/crosshair/base.js +14 -12
  179. package/esm/component/crosshair/base.js.map +1 -1
  180. package/esm/component/crosshair/config.d.ts +11 -31
  181. package/esm/component/crosshair/config.js +8 -25
  182. package/esm/component/crosshair/config.js.map +1 -1
  183. package/esm/component/crosshair/util.d.ts +3 -3
  184. package/esm/component/crosshair/util.js +8 -4
  185. package/esm/component/crosshair/util.js.map +1 -1
  186. package/esm/component/index.js +2 -1
  187. package/esm/component/tooltip/handler/base.js +7 -5
  188. package/esm/component/tooltip/handler/base.js.map +1 -1
  189. package/esm/component/tooltip/handler/utils/attribute.d.ts +3 -3
  190. package/esm/component/tooltip/handler/utils/attribute.js.map +1 -1
  191. package/esm/component/util.d.ts +4 -0
  192. package/esm/component/util.js +6 -0
  193. package/esm/component/util.js.map +1 -0
  194. package/esm/constant/waterfall.js +1 -2
  195. package/esm/constant/word-cloud.js +2 -1
  196. package/esm/core/index.d.ts +1 -1
  197. package/esm/core/index.js +1 -1
  198. package/esm/core/index.js.map +1 -1
  199. package/esm/core/interface.d.ts +7 -1
  200. package/esm/core/interface.js.map +1 -1
  201. package/esm/core/vchart.d.ts +3 -2
  202. package/esm/core/vchart.js +53 -42
  203. package/esm/core/vchart.js.map +1 -1
  204. package/esm/data/transforms/sankey.d.ts +1 -0
  205. package/esm/data/transforms/sankey.js +17 -4
  206. package/esm/data/transforms/sankey.js.map +1 -1
  207. package/esm/interaction/config.d.ts +17 -52
  208. package/esm/interaction/config.js +7 -40
  209. package/esm/interaction/config.js.map +1 -1
  210. package/esm/interaction/dimension-trigger.js +2 -1
  211. package/esm/interaction/drill/drillable.js +2 -2
  212. package/esm/interaction/drill/drillable.js.map +1 -1
  213. package/esm/interaction/trigger.js +2 -2
  214. package/esm/interaction/trigger.js.map +1 -1
  215. package/esm/interaction/zoom/zoomable.js +9 -9
  216. package/esm/interaction/zoom/zoomable.js.map +1 -1
  217. package/esm/layout/base-layout.js +1 -1
  218. package/esm/layout/index.js +1 -1
  219. package/esm/layout/interface.js +1 -1
  220. package/esm/mark/arc-3d.js +1 -1
  221. package/esm/mark/arc.js +1 -1
  222. package/esm/mark/area.js +1 -1
  223. package/esm/mark/base/base-mark.js +4 -5
  224. package/esm/mark/base/base-mark.js.map +1 -1
  225. package/esm/mark/box-plot.js +1 -1
  226. package/esm/model/base-model.d.ts +4 -2
  227. package/esm/model/base-model.js +53 -10
  228. package/esm/model/base-model.js.map +1 -1
  229. package/esm/model/interface.d.ts +10 -3
  230. package/esm/model/interface.js.map +1 -1
  231. package/esm/series/area/area.d.ts +1 -1
  232. package/esm/series/area/area.js +1 -1
  233. package/esm/series/area/area.js.map +1 -1
  234. package/esm/series/bar/bar.d.ts +1 -1
  235. package/esm/series/bar/bar.js +1 -1
  236. package/esm/series/bar/bar.js.map +1 -1
  237. package/esm/series/base/base-series.d.ts +4 -3
  238. package/esm/series/base/base-series.js +14 -46
  239. package/esm/series/base/base-series.js.map +1 -1
  240. package/esm/series/cartesian/cartesian.d.ts +3 -0
  241. package/esm/series/cartesian/cartesian.js +4 -3
  242. package/esm/series/cartesian/cartesian.js.map +1 -1
  243. package/esm/series/dot/dot.js +2 -4
  244. package/esm/series/dot/dot.js.map +1 -1
  245. package/esm/series/gauge/gauge-pointer.d.ts +1 -0
  246. package/esm/series/gauge/gauge-pointer.js +1 -1
  247. package/esm/series/gauge/gauge-pointer.js.map +1 -1
  248. package/esm/series/heatmap/heatmap.js +1 -1
  249. package/esm/series/heatmap/heatmap.js.map +1 -1
  250. package/esm/series/interface/theme.d.ts +2 -0
  251. package/esm/series/interface/theme.js +4 -1
  252. package/esm/series/interface/theme.js.map +1 -1
  253. package/esm/series/link/link.js +1 -1
  254. package/esm/series/link/link.js.map +1 -1
  255. package/esm/series/map/map.js +1 -1
  256. package/esm/series/map/map.js.map +1 -1
  257. package/esm/series/polar/polar.d.ts +1 -0
  258. package/esm/series/polar/polar.js +3 -2
  259. package/esm/series/polar/polar.js.map +1 -1
  260. package/esm/series/polar/progress-like/progress-like.d.ts +1 -1
  261. package/esm/series/polar/progress-like/progress-like.js +2 -3
  262. package/esm/series/polar/progress-like/progress-like.js.map +1 -1
  263. package/esm/series/progress/circular/circular.js +4 -4
  264. package/esm/series/progress/circular/circular.js.map +1 -1
  265. package/esm/series/range-area/interface.d.ts +2 -1
  266. package/esm/series/range-area/interface.js.map +1 -1
  267. package/esm/series/rose/rose.d.ts +1 -1
  268. package/esm/series/rose/rose.js +1 -1
  269. package/esm/series/rose/rose.js.map +1 -1
  270. package/esm/series/sankey/sankey.js +12 -9
  271. package/esm/series/sankey/sankey.js.map +1 -1
  272. package/esm/series/scatter/scatter.d.ts +1 -2
  273. package/esm/series/scatter/scatter.js +2 -3
  274. package/esm/series/scatter/scatter.js.map +1 -1
  275. package/esm/series/waterfall/waterfall.d.ts +1 -1
  276. package/esm/series/waterfall/waterfall.js +3 -3
  277. package/esm/series/waterfall/waterfall.js.map +1 -1
  278. package/esm/series/word-cloud/base.js +33 -35
  279. package/esm/series/word-cloud/base.js.map +1 -1
  280. package/esm/series/word-cloud/word-cloud-3d.js +32 -32
  281. package/esm/series/word-cloud/word-cloud-3d.js.map +1 -1
  282. package/esm/theme/builtin/index.d.ts +4 -1
  283. package/esm/theme/builtin/index.js +15 -6
  284. package/esm/theme/builtin/index.js.map +1 -1
  285. package/esm/theme/color-scheme/util.js +1 -1
  286. package/esm/theme/color-scheme/util.js.map +1 -1
  287. package/esm/theme/theme-manager.js +5 -4
  288. package/esm/theme/theme-manager.js.map +1 -1
  289. package/esm/theme/util.d.ts +5 -0
  290. package/esm/theme/util.js +34 -0
  291. package/esm/theme/util.js.map +1 -0
  292. package/esm/util/spec/merge-theme.d.ts +4 -1
  293. package/esm/util/spec/merge-theme.js +18 -10
  294. package/esm/util/spec/merge-theme.js.map +1 -1
  295. package/esm/util/spec/preprocess.js +2 -1
  296. package/esm/util/spec/preprocess.js.map +1 -1
  297. package/package.json +17 -17
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/core/interface.ts"],"names":[],"mappings":"","file":"interface.js","sourcesContent":["import type { DataSet, DataView } from '@visactor/vdataset';\n\nimport type { IParserOptions } from '@visactor/vdataset/es/parser';\nimport type {\n Datum,\n IMarkStateSpec,\n IPoint,\n IRegionQuerier,\n IShowTooltipOption,\n ISpec,\n ITooltipHandler,\n Maybe,\n MaybeArray,\n StringOrNumber\n} from '../typings';\nimport type { IMorphConfig } from '../animation/spec';\nimport type { IBoundsLike } from '@visactor/vutils';\nimport type { EventCallback, EventParams, EventQuery, EventType } from '../event/interface';\nimport type { IMark } from '../mark/interface';\nimport type { ISeries } from '../series/interface/series';\nimport type { ITheme } from '../theme';\nimport type { IComponent } from '../component/interface';\nimport type { LayoutCallBack } from '../layout/interface';\nimport type { Compiler } from '../compile/compiler';\nimport type { IChart } from '../chart/interface';\nimport type { Stage } from '@visactor/vrender-core';\n\nexport type DataLinkSeries = {\n /**\n * 关联的系列 id\n * the binding series id\n */\n seriesId?: StringOrNumber;\n /**\n * 关联的系列索引\n * the binding series index\n */\n seriesIndex?: number;\n};\n\nexport type DataLinkAxis = {\n /**\n * 关联的轴 id,目前仅支持直角坐标轴\n * the binding axis id\n */\n axisId?: StringOrNumber;\n /**\n * 关联的轴索引,目前仅支持直角坐标轴\n * the binding axis index\n */\n axisIndex?: number;\n};\n\nexport interface IVChart {\n readonly id: number;\n\n /**\n * **同步**渲染图表。\n * @param morphConfig 图表 morph 动画配置,可选\n * @returns VChart 实例\n */\n renderSync: (morphConfig?: IMorphConfig) => IVChart;\n\n /**\n * **异步**渲染图表。\n * @async\n * @param morphConfig 图表 morph 动画配置,可选\n * @returns VChart 实例\n */\n renderAsync: (morphConfig?: IMorphConfig) => Promise<IVChart>;\n\n /**\n * **异步**更新数据。\n * @param id 数据 id\n * @param data 数据值\n * @param options 数据参数\n * @returns VChart 实例\n */\n updateData: (id: StringOrNumber, data: Datum[] | string, options?: IParserOptions) => Promise<IVChart>;\n\n /**\n * **异步**批量更新数据。\n * @param list 待更新的数据列表\n * @returns VChart 实例\n */\n updateDataInBatches: (list: { id: string; data: Datum[]; options?: IParserOptions }[]) => Promise<IVChart>;\n\n /**\n * **同步**更新数据。\n * @param id 数据 id\n * @param data 数据值\n * @param options 数据参数\n * @returns VChart 实例\n */\n updateDataSync: (id: StringOrNumber, data: Datum[], options?: IParserOptions) => IVChart;\n\n /**\n * **异步**spec 更新。\n * @param spec\n * @param forceMerge\n * @returns\n */\n updateSpec: (spec: ISpec, forceMerge?: boolean, morphConfig?: IMorphConfig) => Promise<IVChart>;\n\n /**\n * **同步方法** 模块 spec 更新\n * @param filter\n * @param spec\n * @param forceMerge\n * @returns\n * @sync 1.4.0\n */\n updateModelSpecSync: (\n filter: string | { type: string; index: number },\n spec: unknown,\n forceMerge?: boolean,\n morphConfig?: IMorphConfig\n ) => IVChart;\n\n /**\n * **异步方法** 模块 spec 更新\n * @param filter\n * @param spec\n * @param forceMerge\n * @returns\n * @sync 1.4.0\n */\n updateModelSpec: (\n filter: string | { type: string; index: number },\n spec: unknown,\n forceMerge?: boolean,\n morphConfig?: IMorphConfig\n ) => Promise<IVChart>;\n\n /**\n * 更新绘制区域。\n * @param viewBox 绘制区域\n * @param reRender 是否重新渲染,默认为 true\n * @returns\n */\n updateViewBox: (viewBox: IBoundsLike, reRender?: boolean) => IVChart;\n\n /**\n * **异步方法**,图表尺寸更新方法。\n * @param width 宽度\n * @param height 高度\n * @returns VChart 当前实例\n */\n resize: (width: number, height: number) => Promise<IVChart>;\n\n /**\n * 销毁图表。\n */\n release: () => void;\n\n /**\n * 事件监听\n */\n on: ((eType: EventType, handler: EventCallback<EventParams>) => void) &\n ((eType: EventType, query: EventQuery, handler: EventCallback<EventParams>) => void);\n off: (eType: EventType, handler?: EventCallback<EventParams>) => void;\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\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\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\n /**\n * 获取当前主题,会返回完整的主题配置\n * */\n getCurrentTheme: () => ITheme;\n\n /**\n * 获取当前主题名称(只能获取用户通过`setCurrentTheme`方法设置过的主题,默认值为`ThemeManager`统一设置的主题)\n */\n getCurrentThemeName: () => string;\n\n /**\n * **异步方法**, 设置当前主题。\n * @param name 主题名称\n * @returns\n */\n setCurrentTheme: (name: string) => Promise<IVChart>;\n\n /**\n * 自定义 TooltipHandler。\n * @param tooltipHandler\n */\n setTooltipHandler: (tooltipHandler: ITooltipHandler) => void;\n\n /**\n * 获取用户定义的 TooltipHandler\n * @returns ITooltipHandler\n */\n getTooltipHandlerByUser: () => ITooltipHandler | undefined;\n\n /**\n * 获取 TooltipHandler\n * @returns\n */\n getTooltipHandler: () => ITooltipHandler | undefined;\n\n /**\n * 手动调用展示 tooltip\n * @param datum 原始数据\n * @param options\n * @returns\n */\n showTooltip: (datum: Datum, options: IShowTooltipOption) => boolean;\n\n /**\n * 手动调用,关闭 tooltip\n * @returns\n */\n hideTooltip: () => boolean;\n\n // 图例相关 api\n /**\n * 根据图例组件 id 获取图例数据\n * @param id 组件 id\n * @returns\n */\n getLegendDataById: (id: string) => Datum[];\n\n /**\n * 根据图例组件索引获取图例数据\n * @param index 图例索引,默认为 0\n * @returns\n */\n getLegendDataByIndex: (index?: number) => Datum[];\n\n /**\n * 根据图例组件 id 获取当前图例的选中项\n * @param id 组件 id\n * @returns\n */\n getLegendSelectedDataById: (id: string) => StringOrNumber[];\n\n /**\n * 根据图例组件索引获取当前图例的选中项\n * @param index 图例索引,默认为 0\n * @returns\n */\n getLegendSelectedDataByIndex: (index?: number) => StringOrNumber[];\n\n /**\n * 根据图例组件 id 更新图例选中数据\n * @param id\n * @returns\n */\n setLegendSelectedDataById: (id: string, selectedData: StringOrNumber[]) => void;\n\n /**\n * 根据图例组件索引更新图例选中数据\n * @param index 图例索引,默认为 0\n * @returns\n */\n setLegendSelectedDataByIndex: (index: number, selectedData: StringOrNumber[]) => void;\n\n /**\n * **异步方法**返回一个包含图片展示的 data URI。\n * @returns data URI\n */\n getDataURL: () => Promise<any>;\n\n /**\n * **异步方法** 导出图表图片,只支持浏览器端。\n * @param name 保存的图片名称\n * @returns\n */\n exportImg: (name?: string) => Promise<void>;\n\n /**\n * 导出绘制了图表内容的 canvas\n * @returns HTMLCanvasElement\n * @since 1.5.2\n */\n exportCanvas: () => HTMLCanvasElement | undefined;\n\n /**\n * 目前仅支持 node 环境,用于 node 端的图片导出\n * @returns\n */\n getImageBuffer: () => void;\n /**\n * 设置自定义布局\n */\n setLayout: (layout: LayoutCallBack) => void;\n /**\n * 强制重新布局\n */\n reLayout: () => void;\n\n /**\n * 获取编译器实例\n * @returns\n */\n getCompiler: () => Compiler;\n\n /**\n * Get the chart instance\n * 获取 Chart 图表实例。\n * @returns Chart 实例\n */\n getChart: () => Maybe<IChart>;\n\n /**\n * Get the renderer instance.\n * 获取渲染引擎实例。\n * @returns the instance of VRender Stage\n */\n getStage: () => Stage;\n\n /**\n * 获取 canvas dom\n * @returns HTMLCanvasElement | undefined\n */\n getCanvas: () => HTMLCanvasElement | undefined;\n\n /**\n * 获取图表的 dom 容器\n * @returns\n */\n getContainer: () => Maybe<HTMLElement>;\n\n /**\n * 获取图表所有的组件实例\n * @returns 组件实例\n */\n getComponents: () => IComponent[];\n\n /**\n * 获取图表的 DataSet 实例\n * @returns DataSet 实例\n */\n getDataSet: () => Maybe<DataSet>;\n\n // 数据转换相关的 api\n /**\n * Convert the data to coordinate position\n * @param datum the datum to convert\n * @param dataLinkInfo the data link info, could be seriesId or seriesIndex, default is { seriesIndex: 0 }\n * @param isRelativeToCanvas 是否相对画布坐标,默认为 false Whether relative to canvas coordinates, default is false\n * @returns\n */\n convertDatumToPosition: (datum: Datum, dataLinkInfo?: DataLinkSeries, isRelativeToCanvas?: boolean) => IPoint | null;\n\n /**\n * Convert the value to coordinate position\n * @param value number | [number, number], the value to convert\n * @param dataLinkInfo the data link info, could be seriesId,seriesIndex,axisId,axisIndex\n * @param isRelativeToCanvas 是否相对画布坐标,默认为 false Whether relative to canvas coordinates, default is false\n * returns\n */\n convertValueToPosition: ((\n value: StringOrNumber,\n dataLinkInfo: DataLinkAxis,\n isRelativeToCanvas?: boolean\n ) => number | null) &\n ((\n value: [StringOrNumber, StringOrNumber],\n dataLinkInfo: DataLinkSeries,\n isRelativeToCanvas?: boolean\n ) => IPoint | null);\n\n /** 停止正在进行的所有动画 */\n stopAnimation: () => void;\n\n /** 暂停正在进行的所有动画 */\n pauseAnimation: () => void;\n\n /** 恢复暂停时正在进行的所有动画 */\n resumeAnimation: () => void;\n}\n\nexport interface IGlobalConfig {\n /** 是否全局显示唯一 tooltip */\n uniqueTooltip?: boolean;\n /** 是否监测图表 dom 变化自动 release */\n // TODO\n // autoRelease?: boolean;\n}\n"]}
1
+ {"version":3,"sources":["../src/core/interface.ts"],"names":[],"mappings":"","file":"interface.js","sourcesContent":["import type { DataSet } from '@visactor/vdataset';\n\nimport type { IParserOptions } from '@visactor/vdataset/es/parser';\nimport type {\n Datum,\n IMarkStateSpec,\n IPoint,\n IRegionQuerier,\n IShowTooltipOption,\n ISpec,\n ITooltipHandler,\n Maybe,\n MaybeArray,\n StringOrNumber\n} from '../typings';\nimport type { IMorphConfig } from '../animation/spec';\nimport type { IBoundsLike } from '@visactor/vutils';\nimport type { EventCallback, EventParams, EventQuery, EventType } from '../event/interface';\nimport type { IMark } from '../mark/interface';\nimport type { ISeries } from '../series/interface/series';\nimport type { ITheme } from '../theme';\nimport type { IComponent } from '../component/interface';\nimport type { LayoutCallBack } from '../layout/interface';\nimport type { Compiler } from '../compile/compiler';\nimport type { IChart } from '../chart/interface';\nimport type { IGradientColor, Stage } from '@visactor/vrender-core';\nimport type { IThemeColorScheme } from '../theme/color-scheme/interface';\n\nexport type DataLinkSeries = {\n /**\n * 关联的系列 id\n * the binding series id\n */\n seriesId?: StringOrNumber;\n /**\n * 关联的系列索引\n * the binding series index\n */\n seriesIndex?: number;\n};\n\nexport type DataLinkAxis = {\n /**\n * 关联的轴 id,目前仅支持直角坐标轴\n * the binding axis id\n */\n axisId?: StringOrNumber;\n /**\n * 关联的轴索引,目前仅支持直角坐标轴\n * the binding axis index\n */\n axisIndex?: number;\n};\n\nexport interface IVChart {\n readonly id: number;\n\n /**\n * **同步**渲染图表。\n * @param morphConfig 图表 morph 动画配置,可选\n * @returns VChart 实例\n */\n renderSync: (morphConfig?: IMorphConfig) => IVChart;\n\n /**\n * **异步**渲染图表。\n * @async\n * @param morphConfig 图表 morph 动画配置,可选\n * @returns VChart 实例\n */\n renderAsync: (morphConfig?: IMorphConfig) => Promise<IVChart>;\n\n /**\n * **异步**更新数据。\n * @param id 数据 id\n * @param data 数据值\n * @param options 数据参数\n * @returns VChart 实例\n */\n updateData: (id: StringOrNumber, data: Datum[] | string, options?: IParserOptions) => Promise<IVChart>;\n\n /**\n * **异步**批量更新数据。\n * @param list 待更新的数据列表\n * @returns VChart 实例\n */\n updateDataInBatches: (list: { id: string; data: Datum[]; options?: IParserOptions }[]) => Promise<IVChart>;\n\n /**\n * **同步**更新数据。\n * @param id 数据 id\n * @param data 数据值\n * @param options 数据参数\n * @returns VChart 实例\n */\n updateDataSync: (id: StringOrNumber, data: Datum[], options?: IParserOptions) => IVChart;\n\n /**\n * **异步**spec 更新。\n * @param spec\n * @param forceMerge\n * @returns\n */\n updateSpec: (spec: ISpec, forceMerge?: boolean, morphConfig?: IMorphConfig) => Promise<IVChart>;\n\n /**\n * **同步方法** 模块 spec 更新\n * @param filter\n * @param spec\n * @param forceMerge\n * @returns\n * @sync 1.4.0\n */\n updateModelSpecSync: (\n filter: string | { type: string; index: number },\n spec: unknown,\n forceMerge?: boolean,\n morphConfig?: IMorphConfig\n ) => IVChart;\n\n /**\n * **异步方法** 模块 spec 更新\n * @param filter\n * @param spec\n * @param forceMerge\n * @returns\n * @sync 1.4.0\n */\n updateModelSpec: (\n filter: string | { type: string; index: number },\n spec: unknown,\n forceMerge?: boolean,\n morphConfig?: IMorphConfig\n ) => Promise<IVChart>;\n\n /**\n * 更新绘制区域。\n * @param viewBox 绘制区域\n * @param reRender 是否重新渲染,默认为 true\n * @returns\n */\n updateViewBox: (viewBox: IBoundsLike, reRender?: boolean) => IVChart;\n\n /**\n * **异步方法**,图表尺寸更新方法。\n * @param width 宽度\n * @param height 高度\n * @returns VChart 当前实例\n */\n resize: (width: number, height: number) => Promise<IVChart>;\n\n /**\n * 销毁图表。\n */\n release: () => void;\n\n /**\n * 事件监听\n */\n on: ((eType: EventType, handler: EventCallback<EventParams>) => void) &\n ((eType: EventType, query: EventQuery, handler: EventCallback<EventParams>) => void);\n off: (eType: EventType, handler?: EventCallback<EventParams>) => void;\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\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\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\n /**\n * 获取当前主题,会返回完整的主题配置(只能获取用户通过`setCurrentTheme`方法设置过的主题,默认值为`ThemeManager`统一设置的主题)\n * */\n getCurrentTheme: () => ITheme;\n\n /**\n * 获取当前主题名称(只能获取用户通过`setCurrentTheme`方法设置过的主题,默认值为`ThemeManager`统一设置的主题)\n */\n getCurrentThemeName: () => string;\n\n /**\n * **异步方法**, 设置当前主题。\n * @param name 主题名称\n * @returns\n */\n setCurrentTheme: (name: string) => Promise<IVChart>;\n\n /**\n * 自定义 TooltipHandler。\n * @param tooltipHandler\n */\n setTooltipHandler: (tooltipHandler: ITooltipHandler) => void;\n\n /**\n * 获取用户定义的 TooltipHandler\n * @returns ITooltipHandler\n */\n getTooltipHandlerByUser: () => ITooltipHandler | undefined;\n\n /**\n * 获取 TooltipHandler\n * @returns\n */\n getTooltipHandler: () => ITooltipHandler | undefined;\n\n /**\n * 手动调用展示 tooltip\n * @param datum 原始数据\n * @param options\n * @returns\n */\n showTooltip: (datum: Datum, options: IShowTooltipOption) => boolean;\n\n /**\n * 手动调用,关闭 tooltip\n * @returns\n */\n hideTooltip: () => boolean;\n\n // 图例相关 api\n /**\n * 根据图例组件 id 获取图例数据\n * @param id 组件 id\n * @returns\n */\n getLegendDataById: (id: string) => Datum[];\n\n /**\n * 根据图例组件索引获取图例数据\n * @param index 图例索引,默认为 0\n * @returns\n */\n getLegendDataByIndex: (index?: number) => Datum[];\n\n /**\n * 根据图例组件 id 获取当前图例的选中项\n * @param id 组件 id\n * @returns\n */\n getLegendSelectedDataById: (id: string) => StringOrNumber[];\n\n /**\n * 根据图例组件索引获取当前图例的选中项\n * @param index 图例索引,默认为 0\n * @returns\n */\n getLegendSelectedDataByIndex: (index?: number) => StringOrNumber[];\n\n /**\n * 根据图例组件 id 更新图例选中数据\n * @param id\n * @returns\n */\n setLegendSelectedDataById: (id: string, selectedData: StringOrNumber[]) => void;\n\n /**\n * 根据图例组件索引更新图例选中数据\n * @param index 图例索引,默认为 0\n * @returns\n */\n setLegendSelectedDataByIndex: (index: number, selectedData: StringOrNumber[]) => void;\n\n /**\n * **异步方法**返回一个包含图片展示的 data URI。\n * @returns data URI\n */\n getDataURL: () => Promise<any>;\n\n /**\n * **异步方法** 导出图表图片,只支持浏览器端。\n * @param name 保存的图片名称\n * @returns\n */\n exportImg: (name?: string) => Promise<void>;\n\n /**\n * 导出绘制了图表内容的 canvas\n * @returns HTMLCanvasElement\n * @since 1.5.2\n */\n exportCanvas: () => HTMLCanvasElement | undefined;\n\n /**\n * 目前仅支持 node 环境,用于 node 端的图片导出\n * @returns\n */\n getImageBuffer: () => void;\n /**\n * 设置自定义布局\n */\n setLayout: (layout: LayoutCallBack) => void;\n /**\n * 强制重新布局\n */\n reLayout: () => void;\n\n /**\n * 获取编译器实例\n * @returns\n */\n getCompiler: () => Compiler;\n\n /**\n * Get the chart instance\n * 获取 Chart 图表实例。\n * @returns Chart 实例\n */\n getChart: () => Maybe<IChart>;\n\n /**\n * Get the renderer instance.\n * 获取渲染引擎实例。\n * @returns the instance of VRender Stage\n */\n getStage: () => Stage;\n\n /**\n * 获取 canvas dom\n * @returns HTMLCanvasElement | undefined\n */\n getCanvas: () => HTMLCanvasElement | undefined;\n\n /**\n * 获取图表的 dom 容器\n * @returns\n */\n getContainer: () => Maybe<HTMLElement>;\n\n /**\n * 获取图表所有的组件实例\n * @returns 组件实例\n */\n getComponents: () => IComponent[];\n\n /**\n * 获取图表的 DataSet 实例\n * @returns DataSet 实例\n */\n getDataSet: () => Maybe<DataSet>;\n\n // 数据转换相关的 api\n /**\n * Convert the data to coordinate position\n * @param datum the datum to convert\n * @param dataLinkInfo the data link info, could be seriesId or seriesIndex, default is { seriesIndex: 0 }\n * @param isRelativeToCanvas 是否相对画布坐标,默认为 false Whether relative to canvas coordinates, default is false\n * @returns\n */\n convertDatumToPosition: (datum: Datum, dataLinkInfo?: DataLinkSeries, isRelativeToCanvas?: boolean) => IPoint | null;\n\n /**\n * Convert the value to coordinate position\n * @param value number | [number, number], the value to convert\n * @param dataLinkInfo the data link info, could be seriesId,seriesIndex,axisId,axisIndex\n * @param isRelativeToCanvas 是否相对画布坐标,默认为 false Whether relative to canvas coordinates, default is false\n * returns\n */\n convertValueToPosition: ((\n value: StringOrNumber,\n dataLinkInfo: DataLinkAxis,\n isRelativeToCanvas?: boolean\n ) => number | null) &\n ((\n value: [StringOrNumber, StringOrNumber],\n dataLinkInfo: DataLinkSeries,\n isRelativeToCanvas?: boolean\n ) => IPoint | null);\n\n /** 停止正在进行的所有动画 */\n stopAnimation: () => void;\n\n /** 暂停正在进行的所有动画 */\n pauseAnimation: () => void;\n\n /** 恢复暂停时正在进行的所有动画 */\n resumeAnimation: () => void;\n}\n\nexport interface IGlobalConfig {\n /** 是否全局显示唯一 tooltip */\n uniqueTooltip?: boolean;\n /** 是否监测图表 dom 变化自动 release */\n // TODO\n // autoRelease?: boolean;\n}\n\n/** 图表层级的主题 */\nexport interface IChartLevelTheme {\n /** 图表背景色 */\n background?: string | IGradientColor;\n /** 图表字体配置 */\n fontFamily?: string;\n /** 全局色板 */\n colorScheme?: IThemeColorScheme;\n}\n"]}
@@ -59,7 +59,7 @@ export declare class VChart implements IVChart {
59
59
  private _curSize;
60
60
  private _observer;
61
61
  private _currentThemeName;
62
- private _currentTheme;
62
+ private _currentChartLevelTheme;
63
63
  private _onError?;
64
64
  private _context;
65
65
  constructor(spec: ISpec, options: IInitOption);
@@ -70,6 +70,7 @@ export declare class VChart implements IVChart {
70
70
  private _bindResizeEvent;
71
71
  private _unBindResizeEvent;
72
72
  private _getCurSize;
73
+ private _doResize;
73
74
  private _onResize;
74
75
  private _initDataSet;
75
76
  updateCustomConfigAndRerender(modifyConfig: () => IUpdateSpecResult | undefined, morphConfig?: IMorphConfig): Promise<IVChart>;
@@ -107,7 +108,7 @@ export declare class VChart implements IVChart {
107
108
  setSelected(datum: MaybeArray<any> | null, filter?: (series: ISeries, mark: IMark) => boolean, region?: IRegionQuerier): void;
108
109
  setHovered(datum: MaybeArray<Datum> | null, filter?: (series: ISeries, mark: IMark) => boolean, region?: IRegionQuerier): void;
109
110
  private _updateCurrentTheme;
110
- private _updateChartConfiguration;
111
+ private _shouldChartResize;
111
112
  private _getBackground;
112
113
  getCurrentTheme(): ITheme;
113
114
  getCurrentThemeName(): string;
@@ -40,7 +40,7 @@ import { ComponentTypeEnum } from "../component/interface";
40
40
 
41
41
  import { DataSet, dataViewParser, DataView } from "@visactor/vdataset";
42
42
 
43
- import { isString, isValid, isNil, array, mergeSpec, createID, debounce, isTrueBrowser, warn, specTransform, convertPoint, preprocessSpecOrTheme, mergeTheme, getThemeObject, mergeSpecWithFilter } from "../util";
43
+ import { isString, isValid, isNil, array, mergeSpec, createID, debounce, isTrueBrowser, warn, specTransform, convertPoint, preprocessSpecOrTheme, getThemeObject, mergeSpecWithFilter } from "../util";
44
44
 
45
45
  import { Factory } from "./factory";
46
46
 
@@ -88,6 +88,8 @@ import { View, registerFilterTransform, registerMapTransform } from "@visactor/v
88
88
 
89
89
  import { VCHART_UTILS } from "./util";
90
90
 
91
+ import { mergeThemeAndGet } from "../theme/util";
92
+
91
93
  export class VChart {
92
94
  static useRegisters(comps) {
93
95
  comps.forEach((fn => {
@@ -146,12 +148,9 @@ export class VChart {
146
148
  onError: msg => {
147
149
  throw new Error(msg);
148
150
  }
149
- }, this._observer = null, this._context = {}, this._onResize = debounce(((...args) => {
150
- const {width: width, height: height} = this._getCurSize();
151
- this._curSize.width === width && this._curSize.height === height || (this._curSize = {
152
- width: width,
153
- height: height
154
- }, this.resize(width, height));
151
+ }, this._observer = null, this._currentChartLevelTheme = {}, this._context = {},
152
+ this._onResize = debounce(((...args) => {
153
+ this._doResize();
155
154
  }), 100), this._option = mergeOrigin(this._option, options), this._onError = null === (_a = this._option) || void 0 === _a ? void 0 : _a.onError;
156
155
  const _g = this._option, {dom: dom, renderCanvas: renderCanvas, mode: mode, stage: stage, poptip: poptip} = _g, restOptions = __rest(_g, [ "dom", "renderCanvas", "mode", "stage", "poptip" ]);
157
156
  dom && (this._container = isString(dom) ? null === document || void 0 === document ? void 0 : document.getElementById(dom) : dom),
@@ -176,7 +175,7 @@ export class VChart {
176
175
  this._event = new Event(this._eventDispatcher, mode), this._compiler.initView(),
177
176
  null === (_d = this.getStage()) || void 0 === _d || _d.setTheme({
178
177
  text: {
179
- fontFamily: this._currentTheme.fontFamily
178
+ fontFamily: this._currentChartLevelTheme.fontFamily
180
179
  }
181
180
  }), this._initDataSet(this._option.dataSet), this._autoSize = !!isTrueBrowser(mode) && (null === (_f = null !== (_e = spec.autoFit) && void 0 !== _e ? _e : this._option.autoFit) || void 0 === _f || _f),
182
181
  this._bindResizeEvent(), this._bindVGrammarViewEvent(), this._event.emit(ChartEvent.initialized, {}),
@@ -201,7 +200,15 @@ export class VChart {
201
200
  performanceHook: this._option.performanceHook,
202
201
  viewBox: this._viewBox,
203
202
  animation: this._option.animation,
204
- getTheme: () => this._currentTheme,
203
+ getThemeConfig: () => {
204
+ var _a;
205
+ return {
206
+ globalTheme: this._currentThemeName,
207
+ optionTheme: this._option.theme,
208
+ specTheme: null === (_a = this._spec) || void 0 === _a ? void 0 : _a.theme,
209
+ chartLevelTheme: this._currentChartLevelTheme
210
+ };
211
+ },
205
212
  layout: this._option.layout,
206
213
  onError: this._onError
207
214
  });
@@ -240,6 +247,13 @@ export class VChart {
240
247
  height: null !== (_b = this._spec.height) && void 0 !== _b ? _b : containerHeight
241
248
  };
242
249
  }
250
+ _doResize() {
251
+ const {width: width, height: height} = this._getCurSize();
252
+ this._curSize.width === width && this._curSize.height === height || (this._curSize = {
253
+ width: width,
254
+ height: height
255
+ }, this.resize(width, height));
256
+ }
243
257
  _initDataSet(dataSet) {
244
258
  this._dataSet = dataSet instanceof DataSet ? dataSet : new DataSet, registerDataSetInstanceParser(this._dataSet, "dataview", dataViewParser),
245
259
  registerDataSetInstanceParser(this._dataSet, "array", arrayParser), registerDataSetInstanceTransform(this._dataSet, "stackSplit", stackSplit),
@@ -266,7 +280,7 @@ export class VChart {
266
280
  this._userEvents.forEach((e => {
267
281
  var _a;
268
282
  return null === (_a = this._event) || void 0 === _a ? void 0 : _a.on(e.eType, e.query, e.handler);
269
- })), updateResult.reSize && this._onResize(); else if (updateResult.reCompile && (null === (_b = this._compiler) || void 0 === _b || _b.clear({
283
+ })), updateResult.reSize && this._doResize(); else if (updateResult.reCompile && (null === (_b = this._compiler) || void 0 === _b || _b.clear({
270
284
  chart: this._chart,
271
285
  vChart: this
272
286
  }), null === (_c = this._compiler) || void 0 === _c || _c.compile({
@@ -415,8 +429,8 @@ export class VChart {
415
429
  spec = specTransform(spec);
416
430
  const lastSpec = this._spec;
417
431
  this._spec = spec, isEqual(lastSpec.theme, spec.theme) || (this._updateCurrentTheme(),
418
- null === (_a = this._chart) || void 0 === _a || _a.setCurrentTheme(this._currentTheme, !1));
419
- const reSize = this._updateChartConfiguration(lastSpec);
432
+ null === (_a = this._chart) || void 0 === _a || _a.setCurrentTheme());
433
+ const reSize = this._shouldChartResize(lastSpec);
420
434
  return null === (_c = null === (_b = this._compiler) || void 0 === _b ? void 0 : _b.getVGrammarView()) || void 0 === _c || _c.updateLayoutTag(),
421
435
  mergeUpdateResult(this._chart.updateSpec(spec, morphConfig), {
422
436
  change: reSize,
@@ -430,12 +444,13 @@ export class VChart {
430
444
  updateSpecSync(spec, forceMerge = !1, morphConfig) {
431
445
  return spec ? (isString(spec) && (spec = JSON.parse(spec)), forceMerge && (spec = mergeSpec({}, this._spec, spec)),
432
446
  this.updateCustomConfigAndRerenderSync((() => {
433
- var _a, _b, _c;
447
+ var _a, _b, _c, _d;
434
448
  (spec = specTransform(spec)).data = null !== (_a = spec.data) && void 0 !== _a ? _a : [];
435
449
  const lastSpec = this._spec;
436
- this._spec = spec;
437
- const reSize = this._updateChartConfiguration(lastSpec);
438
- return null === (_c = null === (_b = this._compiler) || void 0 === _b ? void 0 : _b.getVGrammarView()) || void 0 === _c || _c.updateLayoutTag(),
450
+ this._spec = spec, isEqual(lastSpec.theme, spec.theme) || (this._updateCurrentTheme(),
451
+ null === (_b = this._chart) || void 0 === _b || _b.setCurrentTheme());
452
+ const reSize = this._shouldChartResize(lastSpec);
453
+ return null === (_d = null === (_c = this._compiler) || void 0 === _c ? void 0 : _c.getVGrammarView()) || void 0 === _d || _d.updateLayoutTag(),
439
454
  mergeUpdateResult(this._chart.updateSpec(spec, morphConfig), {
440
455
  change: reSize,
441
456
  reMake: !1,
@@ -494,15 +509,15 @@ export class VChart {
494
509
  }
495
510
  on(eType, query, handler) {
496
511
  var _a;
497
- this._userEvents.push({
512
+ this._userEvents && (this._userEvents.push({
498
513
  eType: eType,
499
514
  query: "function" == typeof query ? null : query,
500
515
  handler: "function" == typeof query ? query : handler
501
- }), null === (_a = this._event) || void 0 === _a || _a.on(eType, query, handler);
516
+ }), null === (_a = this._event) || void 0 === _a || _a.on(eType, query, handler));
502
517
  }
503
518
  off(eType, handler) {
504
519
  var _a;
505
- if (handler) {
520
+ if (this._userEvents && 0 !== this._userEvents.length) if (handler) {
506
521
  const index = this._userEvents.findIndex((e => e.eType === eType && e.handler === handler));
507
522
  index >= 0 && (this._userEvents.splice(index, 1), null === (_a = this._event) || void 0 === _a || _a.off(eType, handler));
508
523
  } else this._userEvents.forEach((e => {
@@ -520,35 +535,31 @@ export class VChart {
520
535
  this._chart && this._chart.setHovered(datum, filter, region);
521
536
  }
522
537
  _updateCurrentTheme(nextThemeName) {
523
- var _a, _b, _c;
524
- let finalTheme, optionTheme = this._option.theme, specTheme = null === (_a = this._spec) || void 0 === _a ? void 0 : _a.theme;
525
- if (ThemeManager.themeExist(nextThemeName)) {
526
- const newTheme = ThemeManager.getTheme(nextThemeName);
527
- optionTheme = !optionTheme || isString(optionTheme) ? {} : optionTheme, specTheme = !specTheme || isString(specTheme) ? {} : specTheme,
528
- finalTheme = mergeTheme({}, newTheme, optionTheme, specTheme), this._currentThemeName = nextThemeName;
529
- } else if (isString(specTheme) && ThemeManager.themeExist(specTheme)) finalTheme = mergeTheme({}, ThemeManager.getTheme(specTheme)),
530
- this._currentThemeName = specTheme; else if (isString(optionTheme) && ThemeManager.themeExist(optionTheme)) finalTheme = mergeTheme({}, ThemeManager.getTheme(optionTheme), getThemeObject(specTheme)),
531
- this._currentThemeName = optionTheme; else {
532
- const baseTheme = getThemeObject(this._currentThemeName);
533
- finalTheme = mergeTheme({}, baseTheme, getThemeObject(optionTheme), getThemeObject(specTheme));
534
- }
535
- this._currentTheme = preprocessSpecOrTheme("theme", finalTheme, finalTheme.colorScheme),
536
- setPoptipTheme(preprocessSpecOrTheme("mark-theme", mergeSpec({}, null === (_b = this._currentTheme.component) || void 0 === _b ? void 0 : _b.poptip))),
537
- null === (_c = this._compiler) || void 0 === _c || _c.setBackground(this._getBackground());
538
- }
539
- _updateChartConfiguration(oldSpec) {
538
+ var _a, _b;
539
+ const optionTheme = this._option.theme, specTheme = null === (_a = this._spec) || void 0 === _a ? void 0 : _a.theme;
540
+ nextThemeName && (this._currentThemeName = nextThemeName);
541
+ const colorScheme = mergeThemeAndGet("colorScheme", this._currentThemeName, optionTheme, specTheme);
542
+ this._currentChartLevelTheme = {
543
+ colorScheme: colorScheme,
544
+ background: mergeThemeAndGet("background", this._currentThemeName, optionTheme, specTheme, colorScheme),
545
+ fontFamily: mergeThemeAndGet("fontFamily", this._currentThemeName, optionTheme, specTheme, colorScheme)
546
+ }, setPoptipTheme(preprocessSpecOrTheme("mark-theme", mergeThemeAndGet("component.poptip", this._currentThemeName, optionTheme, specTheme, colorScheme), colorScheme)),
547
+ null === (_b = this._compiler) || void 0 === _b || _b.setBackground(this._getBackground());
548
+ }
549
+ _shouldChartResize(oldSpec) {
540
550
  var _a, _b;
541
551
  let resize = !1;
542
- this._spec.width === oldSpec.width && this._spec.height === oldSpec.height || (resize = !0);
552
+ isNil(this._spec.width) ? this._spec.width = oldSpec.width : this._spec.width !== oldSpec.width && (resize = !0),
553
+ isNil(this._spec.height) ? this._spec.height = oldSpec.height : this._spec.height !== oldSpec.height && (resize = !0);
543
554
  const lasAutoSize = this._autoSize;
544
555
  return this._autoSize = !!isTrueBrowser(this._option.mode) && (null === (_b = null !== (_a = this._spec.autoFit) && void 0 !== _a ? _a : this._option.autoFit) || void 0 === _b || _b),
545
- this._autoSize !== lasAutoSize && (resize = !0), this._updateCurrentTheme(), resize;
556
+ this._autoSize !== lasAutoSize && (resize = !0), resize;
546
557
  }
547
558
  _getBackground() {
548
- return ("string" == typeof this._spec.background ? this._spec.background : null) || this._currentTheme.background || this._option.background;
559
+ return ("string" == typeof this._spec.background ? this._spec.background : null) || this._currentChartLevelTheme.background || this._option.background;
549
560
  }
550
561
  getCurrentTheme() {
551
- return this._currentTheme;
562
+ return getThemeObject(this._currentThemeName);
552
563
  }
553
564
  getCurrentThemeName() {
554
565
  return this._currentThemeName;
@@ -557,7 +568,7 @@ export class VChart {
557
568
  return __awaiter(this, void 0, void 0, (function*() {
558
569
  return ThemeManager.themeExist(name) ? (yield this.updateCustomConfigAndRerender((() => {
559
570
  var _a;
560
- return this._updateCurrentTheme(name), null === (_a = this._chart) || void 0 === _a || _a.setCurrentTheme(this._currentTheme, !0),
571
+ return this._updateCurrentTheme(name), null === (_a = this._chart) || void 0 === _a || _a.setCurrentTheme(!0),
561
572
  {
562
573
  change: !0,
563
574
  reMake: !1
@@ -568,7 +579,7 @@ export class VChart {
568
579
  setCurrentThemeSync(name) {
569
580
  return ThemeManager.themeExist(name) ? (this.updateCustomConfigAndRerenderSync((() => {
570
581
  var _a;
571
- return this._updateCurrentTheme(name), null === (_a = this._chart) || void 0 === _a || _a.setCurrentTheme(this._currentTheme, !0),
582
+ return this._updateCurrentTheme(name), null === (_a = this._chart) || void 0 === _a || _a.setCurrentTheme(!0),
572
583
  {
573
584
  change: !0,
574
585
  reMake: !1