@visactor/vchart 1.5.2-alpha.0 → 1.5.2-hotfix.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (254) hide show
  1. package/build/es5/index.js +1 -1
  2. package/build/index.js +415 -360
  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/polar/progress-like.js +9 -22
  13. package/cjs/chart/polar/progress-like.js.map +1 -1
  14. package/cjs/chart/sequence/sequence.js +0 -1
  15. package/cjs/chart/sequence/sequence.js.map +1 -1
  16. package/cjs/component/axis/util.d.ts +3 -3
  17. package/cjs/component/axis/util.js +14 -10
  18. package/cjs/component/axis/util.js.map +1 -1
  19. package/cjs/component/base/base-component.d.ts +1 -2
  20. package/cjs/component/base/base-component.js +2 -39
  21. package/cjs/component/base/base-component.js.map +1 -1
  22. package/cjs/component/base/util.d.ts +2 -3
  23. package/cjs/component/base/util.js +16 -19
  24. package/cjs/component/base/util.js.map +1 -1
  25. package/cjs/component/brush/brush.js +1 -1
  26. package/cjs/component/brush/brush.js.map +1 -1
  27. package/cjs/component/crosshair/util.d.ts +3 -3
  28. package/cjs/component/crosshair/util.js +7 -5
  29. package/cjs/component/crosshair/util.js.map +1 -1
  30. package/cjs/component/data-zoom/data-zoom/data-zoom.js +4 -0
  31. package/cjs/component/data-zoom/data-zoom/data-zoom.js.map +1 -1
  32. package/cjs/component/geo/geo-coordinate.js +2 -2
  33. package/cjs/component/geo/geo-coordinate.js.map +1 -1
  34. package/cjs/component/index.js +2 -1
  35. package/cjs/component/tooltip/handler/base.js +6 -6
  36. package/cjs/component/tooltip/handler/base.js.map +1 -1
  37. package/cjs/component/tooltip/handler/utils/attribute.d.ts +3 -3
  38. package/cjs/component/tooltip/handler/utils/attribute.js.map +1 -1
  39. package/cjs/component/util.d.ts +4 -0
  40. package/cjs/component/util.js +14 -0
  41. package/cjs/component/util.js.map +1 -0
  42. package/cjs/constant/correlation.js +1 -2
  43. package/cjs/constant/word-cloud.js +2 -1
  44. package/cjs/core/index.d.ts +1 -1
  45. package/cjs/core/index.js +1 -1
  46. package/cjs/core/index.js.map +1 -1
  47. package/cjs/core/instance-manager.js +1 -2
  48. package/cjs/core/interface.d.ts +8 -1
  49. package/cjs/core/interface.js.map +1 -1
  50. package/cjs/core/vchart.d.ts +3 -2
  51. package/cjs/core/vchart.js +36 -30
  52. package/cjs/core/vchart.js.map +1 -1
  53. package/cjs/data/transforms/aggregation.js.map +1 -1
  54. package/cjs/interaction/config.js +1 -2
  55. package/cjs/interaction/dimension-trigger.js +2 -1
  56. package/cjs/layout/util.js +1 -1
  57. package/cjs/mark/base/base-mark.js +4 -5
  58. package/cjs/mark/base/base-mark.js.map +1 -1
  59. package/cjs/model/base-model.d.ts +4 -2
  60. package/cjs/model/base-model.js +51 -11
  61. package/cjs/model/base-model.js.map +1 -1
  62. package/cjs/model/interface.d.ts +10 -3
  63. package/cjs/model/interface.js.map +1 -1
  64. package/cjs/series/area/area.d.ts +1 -1
  65. package/cjs/series/area/area.js +1 -1
  66. package/cjs/series/area/area.js.map +1 -1
  67. package/cjs/series/bar/bar.d.ts +1 -1
  68. package/cjs/series/bar/bar.js +1 -1
  69. package/cjs/series/bar/bar.js.map +1 -1
  70. package/cjs/series/base/base-series.d.ts +4 -3
  71. package/cjs/series/base/base-series.js +12 -46
  72. package/cjs/series/base/base-series.js.map +1 -1
  73. package/cjs/series/dot/dot.js +3 -4
  74. package/cjs/series/dot/dot.js.map +1 -1
  75. package/cjs/series/gauge/gauge-pointer.d.ts +1 -0
  76. package/cjs/series/gauge/gauge-pointer.js +1 -1
  77. package/cjs/series/gauge/gauge-pointer.js.map +1 -1
  78. package/cjs/series/geo/geo.d.ts +1 -1
  79. package/cjs/series/geo/geo.js +2 -2
  80. package/cjs/series/geo/geo.js.map +1 -1
  81. package/cjs/series/heatmap/heatmap.js +1 -1
  82. package/cjs/series/heatmap/heatmap.js.map +1 -1
  83. package/cjs/series/interface/theme.d.ts +2 -0
  84. package/cjs/series/interface/theme.js +3 -2
  85. package/cjs/series/interface/theme.js.map +1 -1
  86. package/cjs/series/link/link.js +1 -1
  87. package/cjs/series/link/link.js.map +1 -1
  88. package/cjs/series/map/map.d.ts +1 -1
  89. package/cjs/series/map/map.js +3 -3
  90. package/cjs/series/map/map.js.map +1 -1
  91. package/cjs/series/map/tooltip-helper.js +2 -2
  92. package/cjs/series/map/tooltip-helper.js.map +1 -1
  93. package/cjs/series/polar/progress-like/progress-like.d.ts +1 -1
  94. package/cjs/series/polar/progress-like/progress-like.js +2 -3
  95. package/cjs/series/polar/progress-like/progress-like.js.map +1 -1
  96. package/cjs/series/progress/circular/circular.js +4 -4
  97. package/cjs/series/progress/circular/circular.js.map +1 -1
  98. package/cjs/series/range-area/interface.d.ts +2 -1
  99. package/cjs/series/range-area/interface.js.map +1 -1
  100. package/cjs/series/rose/rose.d.ts +1 -1
  101. package/cjs/series/rose/rose.js +2 -2
  102. package/cjs/series/rose/rose.js.map +1 -1
  103. package/cjs/series/sankey/sankey.js +14 -16
  104. package/cjs/series/sankey/sankey.js.map +1 -1
  105. package/cjs/series/waterfall/waterfall.d.ts +1 -1
  106. package/cjs/series/waterfall/waterfall.js +3 -3
  107. package/cjs/series/waterfall/waterfall.js.map +1 -1
  108. package/cjs/series/word-cloud/base.js +34 -35
  109. package/cjs/series/word-cloud/base.js.map +1 -1
  110. package/cjs/series/word-cloud/word-cloud-3d.js +32 -32
  111. package/cjs/series/word-cloud/word-cloud-3d.js.map +1 -1
  112. package/cjs/theme/builtin/index.d.ts +4 -1
  113. package/cjs/theme/builtin/index.js +13 -8
  114. package/cjs/theme/builtin/index.js.map +1 -1
  115. package/cjs/theme/color-scheme/util.js +2 -1
  116. package/cjs/theme/color-scheme/util.js.map +1 -1
  117. package/cjs/theme/theme-manager.js +4 -3
  118. package/cjs/theme/theme-manager.js.map +1 -1
  119. package/cjs/theme/util.d.ts +5 -0
  120. package/cjs/theme/util.js +34 -0
  121. package/cjs/theme/util.js.map +1 -0
  122. package/cjs/util/math.js +13 -29
  123. package/cjs/util/math.js.map +1 -1
  124. package/cjs/util/spec/merge-theme.d.ts +4 -1
  125. package/cjs/util/spec/merge-theme.js +22 -13
  126. package/cjs/util/spec/merge-theme.js.map +1 -1
  127. package/cjs/util/spec/preprocess.js +1 -0
  128. package/cjs/util/spec/preprocess.js.map +1 -1
  129. package/esm/chart/base-chart.d.ts +4 -6
  130. package/esm/chart/base-chart.js +42 -42
  131. package/esm/chart/base-chart.js.map +1 -1
  132. package/esm/chart/gauge/gauge.js +3 -2
  133. package/esm/chart/gauge/gauge.js.map +1 -1
  134. package/esm/chart/interface/chart.d.ts +3 -3
  135. package/esm/chart/interface/chart.js.map +1 -1
  136. package/esm/chart/polar/progress-like.js +9 -21
  137. package/esm/chart/polar/progress-like.js.map +1 -1
  138. package/esm/chart/sequence/sequence.js +0 -1
  139. package/esm/chart/sequence/sequence.js.map +1 -1
  140. package/esm/component/axis/util.d.ts +3 -3
  141. package/esm/component/axis/util.js +10 -8
  142. package/esm/component/axis/util.js.map +1 -1
  143. package/esm/component/base/base-component.d.ts +1 -2
  144. package/esm/component/base/base-component.js +3 -40
  145. package/esm/component/base/base-component.js.map +1 -1
  146. package/esm/component/base/util.d.ts +2 -3
  147. package/esm/component/base/util.js +19 -16
  148. package/esm/component/base/util.js.map +1 -1
  149. package/esm/component/brush/brush.js +1 -1
  150. package/esm/component/brush/brush.js.map +1 -1
  151. package/esm/component/crosshair/util.d.ts +3 -3
  152. package/esm/component/crosshair/util.js +8 -4
  153. package/esm/component/crosshair/util.js.map +1 -1
  154. package/esm/component/data-zoom/data-zoom/data-zoom.js +4 -0
  155. package/esm/component/data-zoom/data-zoom/data-zoom.js.map +1 -1
  156. package/esm/component/geo/geo-coordinate.js +2 -2
  157. package/esm/component/geo/geo-coordinate.js.map +1 -1
  158. package/esm/component/index.js +2 -1
  159. package/esm/component/tooltip/handler/base.js +7 -5
  160. package/esm/component/tooltip/handler/base.js.map +1 -1
  161. package/esm/component/tooltip/handler/utils/attribute.d.ts +3 -3
  162. package/esm/component/tooltip/handler/utils/attribute.js.map +1 -1
  163. package/esm/component/util.d.ts +4 -0
  164. package/esm/component/util.js +6 -0
  165. package/esm/component/util.js.map +1 -0
  166. package/esm/constant/correlation.js +1 -2
  167. package/esm/constant/word-cloud.js +2 -1
  168. package/esm/core/index.d.ts +1 -1
  169. package/esm/core/index.js +1 -1
  170. package/esm/core/index.js.map +1 -1
  171. package/esm/core/instance-manager.js +1 -2
  172. package/esm/core/interface.d.ts +8 -1
  173. package/esm/core/interface.js.map +1 -1
  174. package/esm/core/vchart.d.ts +3 -2
  175. package/esm/core/vchart.js +37 -25
  176. package/esm/core/vchart.js.map +1 -1
  177. package/esm/data/transforms/aggregation.js +1 -1
  178. package/esm/data/transforms/aggregation.js.map +1 -1
  179. package/esm/interaction/config.js +1 -2
  180. package/esm/interaction/dimension-trigger.js +2 -1
  181. package/esm/layout/util.js +1 -1
  182. package/esm/mark/base/base-mark.js +4 -5
  183. package/esm/mark/base/base-mark.js.map +1 -1
  184. package/esm/model/base-model.d.ts +4 -2
  185. package/esm/model/base-model.js +53 -10
  186. package/esm/model/base-model.js.map +1 -1
  187. package/esm/model/interface.d.ts +10 -3
  188. package/esm/model/interface.js.map +1 -1
  189. package/esm/series/area/area.d.ts +1 -1
  190. package/esm/series/area/area.js +1 -1
  191. package/esm/series/area/area.js.map +1 -1
  192. package/esm/series/bar/bar.d.ts +1 -1
  193. package/esm/series/bar/bar.js +1 -1
  194. package/esm/series/bar/bar.js.map +1 -1
  195. package/esm/series/base/base-series.d.ts +4 -3
  196. package/esm/series/base/base-series.js +14 -46
  197. package/esm/series/base/base-series.js.map +1 -1
  198. package/esm/series/dot/dot.js +2 -4
  199. package/esm/series/dot/dot.js.map +1 -1
  200. package/esm/series/gauge/gauge-pointer.d.ts +1 -0
  201. package/esm/series/gauge/gauge-pointer.js +1 -1
  202. package/esm/series/gauge/gauge-pointer.js.map +1 -1
  203. package/esm/series/geo/geo.d.ts +1 -1
  204. package/esm/series/geo/geo.js +2 -2
  205. package/esm/series/geo/geo.js.map +1 -1
  206. package/esm/series/heatmap/heatmap.js +1 -1
  207. package/esm/series/heatmap/heatmap.js.map +1 -1
  208. package/esm/series/interface/theme.d.ts +2 -0
  209. package/esm/series/interface/theme.js +4 -1
  210. package/esm/series/interface/theme.js.map +1 -1
  211. package/esm/series/link/link.js +1 -1
  212. package/esm/series/link/link.js.map +1 -1
  213. package/esm/series/map/map.d.ts +1 -1
  214. package/esm/series/map/map.js +3 -3
  215. package/esm/series/map/map.js.map +1 -1
  216. package/esm/series/map/tooltip-helper.js +2 -2
  217. package/esm/series/map/tooltip-helper.js.map +1 -1
  218. package/esm/series/polar/progress-like/progress-like.d.ts +1 -1
  219. package/esm/series/polar/progress-like/progress-like.js +2 -3
  220. package/esm/series/polar/progress-like/progress-like.js.map +1 -1
  221. package/esm/series/progress/circular/circular.js +4 -4
  222. package/esm/series/progress/circular/circular.js.map +1 -1
  223. package/esm/series/range-area/interface.d.ts +2 -1
  224. package/esm/series/range-area/interface.js.map +1 -1
  225. package/esm/series/rose/rose.d.ts +1 -1
  226. package/esm/series/rose/rose.js +1 -1
  227. package/esm/series/rose/rose.js.map +1 -1
  228. package/esm/series/sankey/sankey.js +6 -8
  229. package/esm/series/sankey/sankey.js.map +1 -1
  230. package/esm/series/waterfall/waterfall.d.ts +1 -1
  231. package/esm/series/waterfall/waterfall.js +3 -3
  232. package/esm/series/waterfall/waterfall.js.map +1 -1
  233. package/esm/series/word-cloud/base.js +33 -35
  234. package/esm/series/word-cloud/base.js.map +1 -1
  235. package/esm/series/word-cloud/word-cloud-3d.js +32 -32
  236. package/esm/series/word-cloud/word-cloud-3d.js.map +1 -1
  237. package/esm/theme/builtin/index.d.ts +4 -1
  238. package/esm/theme/builtin/index.js +15 -6
  239. package/esm/theme/builtin/index.js.map +1 -1
  240. package/esm/theme/color-scheme/util.js +1 -1
  241. package/esm/theme/color-scheme/util.js.map +1 -1
  242. package/esm/theme/theme-manager.js +5 -4
  243. package/esm/theme/theme-manager.js.map +1 -1
  244. package/esm/theme/util.d.ts +5 -0
  245. package/esm/theme/util.js +34 -0
  246. package/esm/theme/util.js.map +1 -0
  247. package/esm/util/math.js +3 -15
  248. package/esm/util/math.js.map +1 -1
  249. package/esm/util/spec/merge-theme.d.ts +4 -1
  250. package/esm/util/spec/merge-theme.js +18 -10
  251. package/esm/util/spec/merge-theme.js.map +1 -1
  252. package/esm/util/spec/preprocess.js +2 -1
  253. package/esm/util/spec/preprocess.js.map +1 -1
  254. package/package.json +7 -7
@@ -4,19 +4,28 @@ export * from "./common/legacy";
4
4
 
5
5
  import { mergeTheme } from "../../util/spec/merge-theme";
6
6
 
7
+ import { getActualColor } from "../color-scheme/util";
8
+
7
9
  import { darkTheme } from "./dark";
8
10
 
9
11
  import { lightTheme } from "./light";
10
12
 
11
- export const builtinThemeMap = new Map([ [ lightTheme.name, lightTheme ], [ darkTheme.name, darkTheme ] ]);
13
+ export const builtinThemes = {
14
+ [lightTheme.name]: lightTheme,
15
+ [darkTheme.name]: darkTheme
16
+ };
12
17
 
13
18
  export const defaultThemeName = lightTheme.name;
14
19
 
15
- export const themes = new Map([ [ defaultThemeName, builtinThemeMap.get(defaultThemeName) ] ]);
20
+ export const themes = new Map(Object.keys(builtinThemes).map((key => [ key, builtinThemes[key] ])));
21
+
22
+ export const hasThemeMerged = new Map(Object.keys(builtinThemes).map((key => [ key, key === defaultThemeName ])));
16
23
 
17
- export const getMergedTheme = theme => mergeTheme({}, builtinThemeMap.get(defaultThemeName), theme);
24
+ export const getMergedTheme = theme => mergeTheme({}, themes.get(defaultThemeName), theme);
18
25
 
19
- builtinThemeMap.forEach(((theme, name) => {
20
- name !== defaultThemeName && themes.set(name, getMergedTheme(theme));
21
- }));
26
+ export const defaultChartLevelTheme = {
27
+ background: getActualColor(builtinThemes[defaultThemeName].background, builtinThemes[defaultThemeName].colorScheme),
28
+ fontFamily: builtinThemes[defaultThemeName].fontFamily,
29
+ colorScheme: builtinThemes[defaultThemeName].colorScheme
30
+ };
22
31
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/theme/builtin/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AAExB,cAAc,iBAAiB,CAAC;AAEhC,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAEzD,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAGrC,MAAM,CAAC,MAAM,eAAe,GAAwB,IAAI,GAAG,CAAC;IAC1D,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC;IAC7B,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC;CAC5B,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,gBAAgB,GAAG,UAAU,CAAC,IAAI,CAAC;AAGhD,MAAM,CAAC,MAAM,MAAM,GAAwB,IAAI,GAAG,CAAC,CAAC,CAAC,gBAAgB,EAAE,eAAe,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;AAGhH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,KAAsB,EAAU,EAAE,CAC/D,UAAU,CAAC,EAAE,EAAE,eAAe,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,KAAK,CAAC,CAAC;AAG/D,eAAe,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACtC,IAAI,IAAI,KAAK,gBAAgB,EAAE;QAC7B,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;KACzC;AACH,CAAC,CAAC,CAAC","file":"index.js","sourcesContent":["export * from './light';\n/** 历史弃用主题 */\nexport * from './common/legacy';\n\nimport { mergeTheme } from '../../util/spec/merge-theme';\nimport type { ITheme } from '../interface';\nimport { darkTheme } from './dark';\nimport { lightTheme } from './light';\n\n/** 内置主题 map (没有 merge 过默认主题的原始主题) */\nexport const builtinThemeMap: Map<string, ITheme> = new Map([\n [lightTheme.name, lightTheme],\n [darkTheme.name, darkTheme]\n]);\n\n/** 默认主题 */\nexport const defaultThemeName = lightTheme.name;\n\n/** merge 过默认主题的最终主题字典 */\nexport const themes: Map<string, ITheme> = new Map([[defaultThemeName, builtinThemeMap.get(defaultThemeName)]]);\n\n/** 使新主题基于默认主题扩展,保证基础值 */\nexport const getMergedTheme = (theme: Partial<ITheme>): ITheme =>\n mergeTheme({}, builtinThemeMap.get(defaultThemeName), theme);\n\n// 注册其他内置主题\nbuiltinThemeMap.forEach((theme, name) => {\n if (name !== defaultThemeName) {\n themes.set(name, getMergedTheme(theme));\n }\n});\n"]}
1
+ {"version":3,"sources":["../src/theme/builtin/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AAExB,cAAc,iBAAiB,CAAC;AAGhC,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAGrC,MAAM,CAAC,MAAM,aAAa,GAA2B;IACnD,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,UAAU;IAC7B,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,SAAS;CAC5B,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,UAAU,CAAC,IAAI,CAAC;AAGhD,MAAM,CAAC,MAAM,MAAM,GAAwB,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAErH,MAAM,CAAC,MAAM,cAAc,GAAyB,IAAI,GAAG,CACzD,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,gBAAgB,CAAC,CAAC,CACvE,CAAC;AAGF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,KAAsB,EAAU,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,KAAK,CAAC,CAAC;AAEtH,MAAM,CAAC,MAAM,sBAAsB,GAAqB;IACtD,UAAU,EAAE,cAAc,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC,UAAU,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC,WAAW,CAAC;IACnH,UAAU,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC,UAAU;IACtD,WAAW,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC,WAAW;CACzD,CAAC","file":"index.js","sourcesContent":["export * from './light';\n/** 历史弃用主题 */\nexport * from './common/legacy';\n\nimport type { IChartLevelTheme } from '../../core/interface';\nimport { mergeTheme } from '../../util/spec/merge-theme';\nimport { getActualColor } from '../color-scheme/util';\nimport type { ITheme } from '../interface';\nimport { darkTheme } from './dark';\nimport { lightTheme } from './light';\n\n/** 声明内置主题 */\nexport const builtinThemes: Record<string, ITheme> = {\n [lightTheme.name]: lightTheme,\n [darkTheme.name]: darkTheme\n};\n/** 声明默认主题 */\nexport const defaultThemeName = lightTheme.name;\n\n/** 全局主题 map (包含用户新注册的主题) */\nexport const themes: Map<string, ITheme> = new Map(Object.keys(builtinThemes).map(key => [key, builtinThemes[key]]));\n/** 主题 map 中的元素是否 merge 过默认主题 (非默认主题的其他内置主题没有 merge 过默认主题) */\nexport const hasThemeMerged: Map<string, boolean> = new Map(\n Object.keys(builtinThemes).map(key => [key, key === defaultThemeName])\n);\n\n/** 使新主题基于默认主题扩展,保证基础值 */\nexport const getMergedTheme = (theme: Partial<ITheme>): ITheme => mergeTheme({}, themes.get(defaultThemeName), theme);\n\nexport const defaultChartLevelTheme: IChartLevelTheme = {\n background: getActualColor(builtinThemes[defaultThemeName].background, builtinThemes[defaultThemeName].colorScheme),\n fontFamily: builtinThemes[defaultThemeName].fontFamily,\n colorScheme: builtinThemes[defaultThemeName].colorScheme\n};\n"]}
@@ -52,7 +52,7 @@ export function isColorKey(obj) {
52
52
  }
53
53
 
54
54
  export function isProgressiveDataColorScheme(obj) {
55
- return !!isArray(obj) && obj.every((item => isValid(item.scheme)));
55
+ return !(!isArray(obj) || 0 === obj.length) && obj.every((item => isValid(item.scheme)));
56
56
  }
57
57
 
58
58
  export function transformColorSchemeToStandardStruct(colorScheme) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/theme/color-scheme/util.ts"],"names":[],"mappings":"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","file":"util.js","sourcesContent":["import { array, isArray, isFunction, isObject, isString, isValid } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { ColorUtil } from '@visactor/vutils';\nimport type { SeriesTypeEnum } from '../../series/interface';\nimport { Color } from '../../util/color';\nimport type {\n ColorScheme,\n ColorSchemeItem,\n IColorKey,\n IColorSchemeStruct,\n IProgressiveDataSchemeCase,\n IThemeColorScheme,\n ProgressiveDataScheme\n} from './interface';\n\n/**\n * 从色板中获取数据色板(在此步骤中替换语义色值)\n * @param colorScheme\n * @param seriesType\n * @returns\n */\nexport function getDataScheme(\n colorScheme: IThemeColorScheme,\n seriesType?: SeriesTypeEnum\n): Array<ColorSchemeItem> | ProgressiveDataScheme<ColorSchemeItem> {\n const scheme = !isValid(seriesType) ? colorScheme?.default : colorScheme?.[seriesType] ?? colorScheme?.default;\n if (!scheme || isArray(scheme)) {\n // 不带语义色板,直接输出\n return scheme as Array<ColorSchemeItem> | ProgressiveDataScheme<ColorSchemeItem>;\n } else if (isObject(scheme)) {\n // 带语义色板,转换颜色后输出\n const { dataScheme } = scheme as IColorSchemeStruct;\n if (!dataScheme) {\n return [];\n }\n // 渐进式色板的情况\n if (isProgressiveDataColorScheme(dataScheme)) {\n return dataScheme.map(item => ({\n ...item,\n scheme: item.scheme\n .map(color => {\n if (isColorKey(color)) {\n return queryColorFromColorScheme(colorScheme, color, seriesType);\n }\n return color;\n })\n .filter(isValid)\n }));\n }\n // 普通色板的情况\n return dataScheme\n .map(color => {\n if (isColorKey(color)) {\n return queryColorFromColorScheme(colorScheme, color, seriesType);\n }\n return color;\n })\n .filter(isValid);\n }\n return [];\n}\n\n/**\n * 计算最终数据色板(在此步骤中获得渐进式色板的最终色板)\n * @param colorScheme\n * @param seriesType\n * @returns\n */\nexport function computeActualDataScheme(\n dataScheme: Array<ColorSchemeItem> | ProgressiveDataScheme<ColorSchemeItem>,\n colorDomain: any[]\n): Array<ColorSchemeItem> {\n if (isProgressiveDataColorScheme(dataScheme)) {\n return (\n dataScheme.find(item => {\n if (isValid(item.isAvailable)) {\n if (isFunction(item.isAvailable)) {\n return item.isAvailable(colorDomain);\n }\n return !!item.isAvailable;\n } else if (isValid(item.maxDomainLength)) {\n return colorDomain?.length <= item.maxDomainLength;\n }\n return true;\n })?.scheme ?? dataScheme[dataScheme.length - 1].scheme\n );\n }\n return dataScheme;\n}\n\n/**\n * 根据色板和色值索引生成颜色\n * @param colorScheme\n * @param colorKey\n * @param seriesType\n * @returns\n */\nexport function queryColorFromColorScheme(\n colorScheme: IThemeColorScheme,\n colorKey: IColorKey,\n seriesType?: SeriesTypeEnum\n): ColorSchemeItem | undefined {\n const scheme = !isValid(seriesType) ? colorScheme.default : colorScheme[seriesType] ?? colorScheme.default;\n if (!scheme) {\n return undefined;\n }\n let color;\n const { palette } = scheme as IColorSchemeStruct;\n if (isObject(palette)) {\n color = palette[colorKey.key] ?? colorKey.default;\n }\n if (!color) {\n return undefined;\n }\n if ((!isValid(colorKey.a) && !isValid(colorKey.l)) || !isString(color)) {\n return color;\n }\n let c = new Color(color);\n if (isValid(colorKey.l)) {\n const { r, g, b } = c.color;\n const { h, s } = ColorUtil.rgbToHsl(r, g, b);\n const rgb = ColorUtil.hslToRgb(h, s, colorKey.l);\n const newColor = new Color(`rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`);\n newColor.setOpacity(c.color.opacity);\n c = newColor;\n }\n if (isValid(colorKey.a)) {\n c.setOpacity(colorKey.a);\n }\n return c.toRGBA();\n}\n\n/** 查询语义化颜色 */\nexport const getActualColor = (value: any, colorScheme?: IThemeColorScheme, seriesType?: SeriesTypeEnum) => {\n if (isColorKey(value)) {\n if (colorScheme) {\n const color = queryColorFromColorScheme(colorScheme, value, seriesType);\n if (color) {\n return color;\n }\n }\n }\n return value;\n};\n\nexport function isColorKey(obj: any): obj is IColorKey {\n return isObject(obj) && (obj as IColorKey).type === 'palette' && !!(obj as IColorKey).key;\n}\n\nexport function isProgressiveDataColorScheme<T>(obj: any): obj is ProgressiveDataScheme<T> {\n if (!isArray(obj)) {\n return false;\n }\n return obj.every(item => {\n return isValid((item as IProgressiveDataSchemeCase<T>).scheme);\n });\n}\n\n/** 将色板转化为标准形式 */\nexport function transformColorSchemeToStandardStruct(colorScheme: ColorScheme): IColorSchemeStruct {\n if (isArray(colorScheme)) {\n return {\n dataScheme: colorScheme\n };\n }\n return colorScheme;\n}\n"]}
1
+ {"version":3,"sources":["../src/theme/color-scheme/util.ts"],"names":[],"mappings":"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","file":"util.js","sourcesContent":["import { array, isArray, isFunction, isObject, isString, isValid } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { ColorUtil } from '@visactor/vutils';\nimport type { SeriesTypeEnum } from '../../series/interface';\nimport { Color } from '../../util/color';\nimport type {\n ColorScheme,\n ColorSchemeItem,\n IColorKey,\n IColorSchemeStruct,\n IProgressiveDataSchemeCase,\n IThemeColorScheme,\n ProgressiveDataScheme\n} from './interface';\n\n/**\n * 从色板中获取数据色板(在此步骤中替换语义色值)\n * @param colorScheme\n * @param seriesType\n * @returns\n */\nexport function getDataScheme(\n colorScheme: IThemeColorScheme,\n seriesType?: SeriesTypeEnum\n): Array<ColorSchemeItem> | ProgressiveDataScheme<ColorSchemeItem> {\n const scheme = !isValid(seriesType) ? colorScheme?.default : colorScheme?.[seriesType] ?? colorScheme?.default;\n if (!scheme || isArray(scheme)) {\n // 不带语义色板,直接输出\n return scheme as Array<ColorSchemeItem> | ProgressiveDataScheme<ColorSchemeItem>;\n } else if (isObject(scheme)) {\n // 带语义色板,转换颜色后输出\n const { dataScheme } = scheme as IColorSchemeStruct;\n if (!dataScheme) {\n return [];\n }\n // 渐进式色板的情况\n if (isProgressiveDataColorScheme(dataScheme)) {\n return dataScheme.map(item => ({\n ...item,\n scheme: item.scheme\n .map(color => {\n if (isColorKey(color)) {\n return queryColorFromColorScheme(colorScheme, color, seriesType);\n }\n return color;\n })\n .filter(isValid)\n }));\n }\n // 普通色板的情况\n return dataScheme\n .map(color => {\n if (isColorKey(color)) {\n return queryColorFromColorScheme(colorScheme, color, seriesType);\n }\n return color;\n })\n .filter(isValid);\n }\n return [];\n}\n\n/**\n * 计算最终数据色板(在此步骤中获得渐进式色板的最终色板)\n * @param colorScheme\n * @param seriesType\n * @returns\n */\nexport function computeActualDataScheme(\n dataScheme: Array<ColorSchemeItem> | ProgressiveDataScheme<ColorSchemeItem>,\n colorDomain: any[]\n): Array<ColorSchemeItem> {\n if (isProgressiveDataColorScheme(dataScheme)) {\n return (\n dataScheme.find(item => {\n if (isValid(item.isAvailable)) {\n if (isFunction(item.isAvailable)) {\n return item.isAvailable(colorDomain);\n }\n return !!item.isAvailable;\n } else if (isValid(item.maxDomainLength)) {\n return colorDomain?.length <= item.maxDomainLength;\n }\n return true;\n })?.scheme ?? dataScheme[dataScheme.length - 1].scheme\n );\n }\n return dataScheme;\n}\n\n/**\n * 根据色板和色值索引生成颜色\n * @param colorScheme\n * @param colorKey\n * @param seriesType\n * @returns\n */\nexport function queryColorFromColorScheme(\n colorScheme: IThemeColorScheme,\n colorKey: IColorKey,\n seriesType?: SeriesTypeEnum\n): ColorSchemeItem | undefined {\n const scheme = !isValid(seriesType) ? colorScheme.default : colorScheme[seriesType] ?? colorScheme.default;\n if (!scheme) {\n return undefined;\n }\n let color;\n const { palette } = scheme as IColorSchemeStruct;\n if (isObject(palette)) {\n color = palette[colorKey.key] ?? colorKey.default;\n }\n if (!color) {\n return undefined;\n }\n if ((!isValid(colorKey.a) && !isValid(colorKey.l)) || !isString(color)) {\n return color;\n }\n let c = new Color(color);\n if (isValid(colorKey.l)) {\n const { r, g, b } = c.color;\n const { h, s } = ColorUtil.rgbToHsl(r, g, b);\n const rgb = ColorUtil.hslToRgb(h, s, colorKey.l);\n const newColor = new Color(`rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`);\n newColor.setOpacity(c.color.opacity);\n c = newColor;\n }\n if (isValid(colorKey.a)) {\n c.setOpacity(colorKey.a);\n }\n return c.toRGBA();\n}\n\n/** 查询语义化颜色 */\nexport const getActualColor = (value: any, colorScheme?: IThemeColorScheme, seriesType?: SeriesTypeEnum) => {\n if (isColorKey(value)) {\n if (colorScheme) {\n const color = queryColorFromColorScheme(colorScheme, value, seriesType);\n if (color) {\n return color;\n }\n }\n }\n return value;\n};\n\nexport function isColorKey(obj: any): obj is IColorKey {\n return isObject(obj) && (obj as IColorKey).type === 'palette' && !!(obj as IColorKey).key;\n}\n\nexport function isProgressiveDataColorScheme<T>(obj: any): obj is ProgressiveDataScheme<T> {\n if (!isArray(obj) || obj.length === 0) {\n return false;\n }\n return obj.every(item => {\n return isValid((item as IProgressiveDataSchemeCase<T>).scheme);\n });\n}\n\n/** 将色板转化为标准形式 */\nexport function transformColorSchemeToStandardStruct(colorScheme: ColorScheme): IColorSchemeStruct {\n if (isArray(colorScheme)) {\n return {\n dataScheme: colorScheme\n };\n }\n return colorScheme;\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { defaultThemeName, getMergedTheme, themes } from "./builtin";
1
+ import { defaultThemeName, getMergedTheme, hasThemeMerged, themes } from "./builtin";
2
2
 
3
3
  import { InstanceManager } from "../core/instance-manager";
4
4
 
@@ -6,13 +6,14 @@ import { isString } from "@visactor/vutils";
6
6
 
7
7
  export class ThemeManager {
8
8
  static registerTheme(name, theme) {
9
- name && ThemeManager.themes.set(name, getMergedTheme(theme));
9
+ name && (ThemeManager.themes.set(name, getMergedTheme(theme)), hasThemeMerged.set(name, !0));
10
10
  }
11
11
  static getTheme(name) {
12
- return ThemeManager.themes.get(name) || ThemeManager.getDefaultTheme();
12
+ return hasThemeMerged.has(name) && !hasThemeMerged.get(name) && ThemeManager.registerTheme(name, ThemeManager.themes.get(name)),
13
+ ThemeManager.themes.get(name) || ThemeManager.getDefaultTheme();
13
14
  }
14
15
  static removeTheme(name) {
15
- return ThemeManager.themes.delete(name);
16
+ return ThemeManager.themes.delete(name) && hasThemeMerged.delete(name);
16
17
  }
17
18
  static themeExist(name) {
18
19
  return !!isString(name) && ThemeManager.themes.has(name);
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/theme/theme-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAErE,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAE3D,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,MAAM,OAAO,YAAY;IAYvB,MAAM,CAAC,aAAa,CAAC,IAAY,EAAE,KAAsB;QACvD,IAAI,CAAC,IAAI,EAAE;YACT,OAAO;SACR;QAED,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;IACvD,CAAC;IAOD,MAAM,CAAC,QAAQ,CAAC,IAAY;QAC1B,OAAO,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,eAAe,EAAE,CAAC;IACzE,CAAC;IAOD,MAAM,CAAC,WAAW,CAAC,IAAY;QAC7B,OAAO,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;IAOD,MAAM,CAAC,UAAU,CAAC,IAAS;QACzB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;YACnB,OAAO,KAAK,CAAC;SACd;QACD,OAAO,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC;IAGD,MAAM,CAAC,eAAe;QACpB,OAAO,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IACnD,CAAC;IAGD,MAAM,CAAC,eAAe,CAAC,IAAY;QACjC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;YAClC,OAAO;SACR;QACD,YAAY,CAAC,iBAAiB,GAAG,IAAI,CAAC;QACtC,eAAe,CAAC,OAAO,CAAC,CAAC,QAAiB,EAAE,EAAE,CAAC,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;IAClF,CAAC;IAGD,MAAM,CAAC,eAAe;QACpB,OAAO,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC;IAC/D,CAAC;IAGD,MAAM,CAAC,mBAAmB;QACxB,OAAO,YAAY,CAAC,iBAAiB,CAAC;IACxC,CAAC;;AAtEe,mBAAM,GAAG,MAAM,CAAC;AAEjB,8BAAiB,GAAW,gBAAgB,CAAC","file":"theme-manager.js","sourcesContent":["import { defaultThemeName, getMergedTheme, themes } from './builtin';\nimport type { ITheme } from './interface';\nimport { InstanceManager } from '../core/instance-manager';\nimport type { IVChart } from '../core/interface';\nimport { isString } from '@visactor/vutils';\n\nexport class ThemeManager {\n /** 主题字典 */\n static readonly themes = themes;\n\n private static _currentThemeName: string = defaultThemeName; // 设置缺省为默认主题\n\n /**\n * 注册主题\n * @param name 主题名称\n * @param theme 主题配置\n * @returns\n */\n static registerTheme(name: string, theme: Partial<ITheme>) {\n if (!name) {\n return;\n }\n // 所有主题基于默认主题扩展,保证基础值\n ThemeManager.themes.set(name, getMergedTheme(theme));\n }\n\n /**\n * 获取主题\n * @param name 主题名称\n * @returns\n */\n static getTheme(name: string) {\n return ThemeManager.themes.get(name) || ThemeManager.getDefaultTheme();\n }\n\n /**\n * 移除主题\n * @param name 主题名称\n * @returns 是否移除成功\n */\n static removeTheme(name: string): boolean {\n return ThemeManager.themes.delete(name);\n }\n\n /**\n * 判断主题是否存在\n * @param name 主题名称\n * @returns 是否存在\n */\n static themeExist(name: any) {\n if (!isString(name)) {\n return false;\n }\n return ThemeManager.themes.has(name);\n }\n\n /** 获取图表默认主题(非用户配置) */\n static getDefaultTheme(): ITheme {\n return ThemeManager.themes.get(defaultThemeName);\n }\n\n /** 设置当前主题(所有实例生效) */\n static setCurrentTheme(name: string) {\n if (!ThemeManager.themeExist(name)) {\n return;\n }\n ThemeManager._currentThemeName = name;\n InstanceManager.forEach((instance: IVChart) => instance?.setCurrentTheme(name));\n }\n\n /** 获取当前主题(只能获取用户通过`setCurrentTheme`方法设置过的主题,默认值为默认主题) */\n static getCurrentTheme(): ITheme {\n return ThemeManager.getTheme(ThemeManager._currentThemeName);\n }\n\n /** 获取当前主题名称(只能获取用户通过`setCurrentTheme`方法设置过的主题,默认值为默认主题) */\n static getCurrentThemeName(): string {\n return ThemeManager._currentThemeName;\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/theme/theme-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAErF,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAE3D,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,MAAM,OAAO,YAAY;IAYvB,MAAM,CAAC,aAAa,CAAC,IAAY,EAAE,KAAsB;QACvD,IAAI,CAAC,IAAI,EAAE;YACT,OAAO;SACR;QAED,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;QACrD,cAAc,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACjC,CAAC;IAOD,MAAM,CAAC,QAAQ,CAAC,IAAY;QAC1B,IAAI,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;YAEzD,YAAY,CAAC,aAAa,CAAC,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;SACjE;QACD,OAAO,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,eAAe,EAAE,CAAC;IACzE,CAAC;IAOD,MAAM,CAAC,WAAW,CAAC,IAAY;QAC7B,OAAO,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACzE,CAAC;IAOD,MAAM,CAAC,UAAU,CAAC,IAAS;QACzB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;YACnB,OAAO,KAAK,CAAC;SACd;QACD,OAAO,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC;IAGD,MAAM,CAAC,eAAe;QACpB,OAAO,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IACnD,CAAC;IAGD,MAAM,CAAC,eAAe,CAAC,IAAY;QACjC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;YAClC,OAAO;SACR;QACD,YAAY,CAAC,iBAAiB,GAAG,IAAI,CAAC;QACtC,eAAe,CAAC,OAAO,CAAC,CAAC,QAAiB,EAAE,EAAE,CAAC,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;IAClF,CAAC;IAGD,MAAM,CAAC,eAAe;QACpB,OAAO,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC;IAC/D,CAAC;IAGD,MAAM,CAAC,mBAAmB;QACxB,OAAO,YAAY,CAAC,iBAAiB,CAAC;IACxC,CAAC;;AA3Ee,mBAAM,GAAG,MAAM,CAAC;AAEjB,8BAAiB,GAAW,gBAAgB,CAAC","file":"theme-manager.js","sourcesContent":["import { defaultThemeName, getMergedTheme, hasThemeMerged, themes } from './builtin';\nimport type { ITheme } from './interface';\nimport { InstanceManager } from '../core/instance-manager';\nimport type { IVChart } from '../core/interface';\nimport { isString } from '@visactor/vutils';\n\nexport class ThemeManager {\n /** 主题字典 */\n static readonly themes = themes;\n\n private static _currentThemeName: string = defaultThemeName; // 设置缺省为默认主题\n\n /**\n * 注册主题\n * @param name 主题名称\n * @param theme 主题配置\n * @returns\n */\n static registerTheme(name: string, theme: Partial<ITheme>) {\n if (!name) {\n return;\n }\n // 所有主题基于默认主题扩展,保证基础值\n ThemeManager.themes.set(name, getMergedTheme(theme));\n hasThemeMerged.set(name, true);\n }\n\n /**\n * 获取主题\n * @param name 主题名称\n * @returns\n */\n static getTheme(name: string) {\n if (hasThemeMerged.has(name) && !hasThemeMerged.get(name)) {\n // 重新 merge 默认主题\n ThemeManager.registerTheme(name, ThemeManager.themes.get(name));\n }\n return ThemeManager.themes.get(name) || ThemeManager.getDefaultTheme();\n }\n\n /**\n * 移除主题\n * @param name 主题名称\n * @returns 是否移除成功\n */\n static removeTheme(name: string): boolean {\n return ThemeManager.themes.delete(name) && hasThemeMerged.delete(name);\n }\n\n /**\n * 判断主题是否存在\n * @param name 主题名称\n * @returns 是否存在\n */\n static themeExist(name: any) {\n if (!isString(name)) {\n return false;\n }\n return ThemeManager.themes.has(name);\n }\n\n /** 获取图表默认主题(非用户配置) */\n static getDefaultTheme(): ITheme {\n return ThemeManager.themes.get(defaultThemeName);\n }\n\n /** 设置当前主题(所有实例生效) */\n static setCurrentTheme(name: string) {\n if (!ThemeManager.themeExist(name)) {\n return;\n }\n ThemeManager._currentThemeName = name;\n InstanceManager.forEach((instance: IVChart) => instance?.setCurrentTheme(name));\n }\n\n /** 获取当前主题(只能获取用户通过`setCurrentTheme`方法设置过的主题,默认值为默认主题) */\n static getCurrentTheme(): ITheme {\n return ThemeManager.getTheme(ThemeManager._currentThemeName);\n }\n\n /** 获取当前主题名称(只能获取用户通过`setCurrentTheme`方法设置过的主题,默认值为默认主题) */\n static getCurrentThemeName(): string {\n return ThemeManager._currentThemeName;\n }\n}\n"]}
@@ -0,0 +1,5 @@
1
+ import type { ITheme } from './interface';
2
+ import type { IThemeColorScheme } from './color-scheme/interface';
3
+ import type { IModelOption } from '../model/interface';
4
+ export declare const mergeThemeAndGet: (path: string, currentThemeName?: string, optionTheme?: string | ITheme, specTheme?: string | ITheme, colorScheme?: IThemeColorScheme) => any;
5
+ export declare const getThemeFromOption: (path: string, option: Partial<IModelOption>) => any;
@@ -0,0 +1,34 @@
1
+ import { isString, get, isObject, isNil } from "@visactor/vutils";
2
+
3
+ import { ThemeManager } from "./theme-manager";
4
+
5
+ import { mergeSpec, transformColorSchemeToMerge, transformSeriesThemeToMerge } from "../util";
6
+
7
+ import { getActualColor } from "./color-scheme/util";
8
+
9
+ import { defaultChartLevelTheme, defaultThemeName } from "./builtin";
10
+
11
+ export const mergeThemeAndGet = (path, currentThemeName, optionTheme, specTheme, colorScheme) => isString(specTheme) && ThemeManager.themeExist(specTheme) ? getMergedValue(getThemeValue(path, specTheme, colorScheme)) : isString(optionTheme) && ThemeManager.themeExist(optionTheme) ? getMergedValue(getThemeValue(path, optionTheme, colorScheme), getThemeValue(path, specTheme, colorScheme)) : getMergedValue(getThemeValue(path, currentThemeName, colorScheme), getThemeValue(path, optionTheme, colorScheme), getThemeValue(path, specTheme, colorScheme));
12
+
13
+ const getThemeValue = (path, theme, colorScheme) => {
14
+ let themeObject;
15
+ if (isString(theme) && ThemeManager.themeExist(theme) ? themeObject = ThemeManager.getTheme(theme) : isObject(theme) && (themeObject = theme),
16
+ isNil(themeObject)) return;
17
+ const paths = path.split(".");
18
+ if ("colorScheme" === path) return transformColorSchemeToMerge(themeObject.colorScheme);
19
+ if ("background" === path) return getActualColor(themeObject.background, colorScheme);
20
+ if (2 === paths.length && "series" === paths[0]) {
21
+ const {markByName: markByName, mark: mark} = themeObject;
22
+ return transformSeriesThemeToMerge(get(themeObject, paths), paths[1], mark, markByName);
23
+ }
24
+ return get(themeObject, paths);
25
+ }, getMergedValue = (...sources) => mergeSpec({}, ...sources.map((source => ({
26
+ __TMP_KEY__: source
27
+ })))).__TMP_KEY__;
28
+
29
+ export const getThemeFromOption = (path, option) => {
30
+ var _a, _b;
31
+ const {globalTheme: globalTheme = defaultThemeName, optionTheme: optionTheme, specTheme: specTheme, chartLevelTheme: chartLevelTheme = defaultChartLevelTheme} = null !== (_b = null === (_a = option.getThemeConfig) || void 0 === _a ? void 0 : _a.call(option)) && void 0 !== _b ? _b : {};
32
+ return mergeThemeAndGet(path, globalTheme, optionTheme, specTheme, null == chartLevelTheme ? void 0 : chartLevelTheme.colorScheme);
33
+ };
34
+ //# sourceMappingURL=util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/theme/util.ts"],"names":[],"mappings":"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","file":"util.js","sourcesContent":["import { isString, get, isObject, isNil } from '@visactor/vutils';\nimport type { ITheme } from './interface';\nimport { ThemeManager } from './theme-manager';\nimport { mergeSpec, transformColorSchemeToMerge, transformSeriesThemeToMerge } from '../util';\nimport { getActualColor } from './color-scheme/util';\nimport type { IThemeColorScheme } from './color-scheme/interface';\nimport type { IModelOption } from '../model/interface';\nimport { defaultChartLevelTheme, defaultThemeName } from './builtin';\n\n/**\n * 性能优化过的主题合并,只合并需要取用的主题部分\n * @param path 需要取用的路径\n * @param currentThemeName (低优先级)当前全局主题 name\n * @param optionTheme (中优先级)option 中设置的主题\n * @param specTheme (高优先级)spec 中设置的主题\n * @returns\n */\nexport const mergeThemeAndGet = (\n path: string,\n currentThemeName?: string,\n optionTheme?: string | ITheme,\n specTheme?: string | ITheme,\n colorScheme?: IThemeColorScheme\n) => {\n if (isString(specTheme) && ThemeManager.themeExist(specTheme)) {\n // 以 specTheme 为最底开始合并\n return getMergedValue(getThemeValue(path, specTheme, colorScheme));\n } else if (isString(optionTheme) && ThemeManager.themeExist(optionTheme)) {\n // 以 optionTheme 为最底开始合并\n return getMergedValue(getThemeValue(path, optionTheme, colorScheme), getThemeValue(path, specTheme, colorScheme));\n }\n // 以 baseTheme 为最底开始合并\n return getMergedValue(\n getThemeValue(path, currentThemeName, colorScheme),\n getThemeValue(path, optionTheme, colorScheme),\n getThemeValue(path, specTheme, colorScheme)\n );\n};\n\n/** 从 theme 取特定 path 的值,但可能会改变形式为 merge 作准备 */\nconst getThemeValue = (path: string, theme?: string | ITheme, colorScheme?: IThemeColorScheme) => {\n let themeObject: ITheme;\n if (isString(theme) && ThemeManager.themeExist(theme)) {\n themeObject = ThemeManager.getTheme(theme);\n } else if (isObject(theme)) {\n themeObject = theme;\n }\n if (isNil(themeObject)) {\n return undefined;\n }\n\n const paths = path.split('.');\n\n const colorSchemePath: keyof ITheme = 'colorScheme';\n if (path === colorSchemePath) {\n return transformColorSchemeToMerge(themeObject.colorScheme);\n }\n const backgroundPath: keyof ITheme = 'background';\n if (path === backgroundPath) {\n return getActualColor(themeObject.background, colorScheme);\n }\n const seriesPath: keyof ITheme = 'series';\n if (paths.length === 2 && paths[0] === seriesPath) {\n const { markByName, mark } = themeObject;\n return transformSeriesThemeToMerge(get(themeObject, paths), paths[1], mark, markByName);\n }\n\n return get(themeObject, paths);\n};\n\nconst getMergedValue = (...sources: any[]) => {\n const tmpKey = '__TMP_KEY__';\n const obj = mergeSpec(\n {},\n ...sources.map(source => ({\n [tmpKey]: source\n }))\n );\n return obj[tmpKey];\n};\n\nexport const getThemeFromOption = (path: string, option: Partial<IModelOption>) => {\n const {\n globalTheme = defaultThemeName,\n optionTheme,\n specTheme,\n chartLevelTheme = defaultChartLevelTheme\n } = option.getThemeConfig?.() ?? {};\n return mergeThemeAndGet(path, globalTheme, optionTheme, specTheme, chartLevelTheme?.colorScheme);\n};\n"]}
package/esm/util/math.js CHANGED
@@ -2,12 +2,10 @@ import { isValidNumber } from "./type";
2
2
 
3
3
  import { regressionLinear } from "@visactor/vgrammar-util";
4
4
 
5
- import { isNumberClose, isGreater, isLess, isValid, PointService, median as visMedian } from "@visactor/vutils";
5
+ import { isNumberClose, isGreater, isLess, isValid, PointService, median as visMedian, maxInArray, minInArray } from "@visactor/vutils";
6
6
 
7
7
  import { normalizeAngle, angleLabelOrientAttribute } from "@visactor/vutils-extension";
8
8
 
9
- import { warn } from "./debug";
10
-
11
9
  export const isClose = isNumberClose;
12
10
 
13
11
  export { isGreater, isLess, normalizeAngle, angleLabelOrientAttribute };
@@ -45,21 +43,11 @@ export function outOfBounds(bounds, x, y) {
45
43
  }
46
44
 
47
45
  export function min(data, field) {
48
- const initialData = field ? +data[0][field] : +data[0];
49
- if (!isValidNumber(initialData)) return warn("invalid data"), 0;
50
- return data.reduce(((pre, _cur) => {
51
- const cur = field ? +_cur[field] : +_cur;
52
- return isValidNumber(cur) && cur < pre && (pre = cur), pre;
53
- }), initialData);
46
+ return minInArray(data.map((d => +d[field])).filter((d => isValidNumber(d))));
54
47
  }
55
48
 
56
49
  export function max(data, field) {
57
- const initialData = field ? +data[0][field] : +data[0];
58
- if (!isValidNumber(initialData)) return warn("invalid data"), 0;
59
- return data.reduce(((pre, _cur) => {
60
- const cur = field ? +_cur[field] : +_cur;
61
- return isValidNumber(cur) && cur > pre && (pre = cur), pre;
62
- }), initialData);
50
+ return maxInArray(data.map((d => +d[field])).filter((d => isValidNumber(d))));
63
51
  }
64
52
 
65
53
  export function sum(data, field) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/util/math.ts"],"names":[],"mappings":"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","file":"math.js","sourcesContent":["import type { IBoundsLike } from '@visactor/vutils';\nimport type { IPoint, IPolarPoint, Quadrant, TextAlign, TextBaseLine } from '../typings';\nimport type { Datum } from '@visactor/vgrammar-core';\nimport { isValidNumber } from './type';\nimport { regressionLinear } from '@visactor/vgrammar-util';\nimport { isNumberClose, isGreater, isLess, isValid, PointService, median as visMedian } from '@visactor/vutils';\nimport { normalizeAngle, angleLabelOrientAttribute } from '@visactor/vutils-extension';\n\nimport { warn } from './debug';\n\nexport const isClose = isNumberClose;\nexport { isGreater, isLess, normalizeAngle, angleLabelOrientAttribute };\n\n/**\n * 极坐标系 -> 直角坐标系\n * @param point\n * @returns\n */\nexport function polarToCartesian(point: IPolarPoint): IPoint {\n if (!point.radius) {\n return { x: 0, y: 0 };\n }\n return {\n x: Math.cos(point.angle) * point.radius,\n y: Math.sin(point.angle) * point.radius\n };\n}\n\n/**\n * 根据角度计算象限\n * 计算角度所在象限\n * @param angle\n * @returns\n */\nexport function computeQuadrant(angle: number): Quadrant {\n angle = normalizeAngle(angle);\n if (angle > 0 && angle <= Math.PI / 2) {\n return 2;\n } else if (angle > Math.PI / 2 && angle <= Math.PI) {\n return 3;\n } else if (angle > Math.PI && angle <= (3 * Math.PI) / 2) {\n return 4;\n }\n return 1;\n}\n\n/**\n * 将角度轴起始角度 & 终结角度标准化\n * @param start\n * @param end\n * @returns\n */\nexport function normalizeStartEndAngle(\n start: number | null,\n end: number | null\n): { startAngle: number; endAngle: number } {\n let startAngle: number = 0;\n let endAngle: number = Math.PI * 2;\n const isStartValid = isValid(start);\n const isEndValid = isValid(end);\n if (!isStartValid && !isEndValid) {\n startAngle = 0;\n endAngle = Math.PI * 2;\n } else if (!isEndValid) {\n startAngle = start as number;\n endAngle = (start as number) + Math.PI * 2;\n } else if (!isStartValid) {\n startAngle = (end as number) - Math.PI * 2;\n endAngle = end as number;\n } else {\n startAngle = start as number;\n endAngle = end as number;\n }\n\n while (endAngle <= startAngle) {\n endAngle += Math.PI * 2;\n }\n while (startAngle > Math.PI * 2) {\n startAngle -= Math.PI * 2;\n endAngle -= Math.PI * 2;\n }\n while (endAngle < 0) {\n startAngle += Math.PI * 2;\n endAngle += Math.PI * 2;\n }\n return { startAngle, endAngle };\n}\n\nexport function outOfBounds(bounds: IBoundsLike, x: number, y: number) {\n return bounds.x1 > x || bounds.x2 < x || bounds.y1 > y || bounds.y2 < y;\n}\n\nexport function min(data: any[], field?: string): number {\n const initialData = field ? +data[0][field] : +data[0];\n\n if (!isValidNumber(initialData)) {\n warn('invalid data');\n return 0;\n }\n const min = data.reduce((pre, _cur) => {\n const cur = field ? +_cur[field] : +_cur;\n if (isValidNumber(cur) && cur < pre) {\n pre = cur;\n }\n return pre;\n }, initialData);\n return min;\n}\n\nexport function max(data: any[], field?: string): number {\n const initialData = field ? +data[0][field] : +data[0];\n if (!isValidNumber(initialData)) {\n warn('invalid data');\n return 0;\n }\n const max = data.reduce((pre, _cur) => {\n const cur = field ? +_cur[field] : +_cur;\n if (isValidNumber(cur) && cur > pre) {\n pre = cur;\n }\n return pre;\n }, initialData);\n return max;\n}\n\nexport function sum(data: any[], field?: string): number {\n return data.reduce((pre, _cur) => {\n const cur = field ? +_cur[field] : +_cur;\n if (isValidNumber(cur)) {\n pre += cur;\n }\n return pre;\n }, 0);\n}\n\nexport function average(data: any[], field?: string): number {\n let sum = 0;\n let count = 0;\n data.forEach((x: any) => {\n const v = field ? +x[field] : +x;\n if (isValidNumber(v)) {\n sum += v;\n count++;\n }\n });\n\n const average = sum / count;\n return average;\n}\n\nexport function variance(data: any[], field?: string): number {\n const averageNumber = average(data, field);\n\n if (data.length <= 1) {\n return 0;\n }\n\n const total = data.reduce((sum, cur) => sum + (field ? +cur[field] : +cur - averageNumber) ** 2, 0);\n const value = total / (data.length - 1);\n return value;\n}\n\nexport function standardDeviation(data: any[], field?: string): number {\n const value = Math.sqrt(variance(data, field));\n return value;\n}\n\nexport function median(data: any[], field?: string): number {\n const value = visMedian(data.map((datum: Datum) => datum[field]));\n return value;\n}\n\nexport function regression(data: any[], fieldX?: string, fieldY?: string): any[] {\n const { predict } = regressionLinear(\n data,\n datum => datum[fieldX],\n datum => datum[fieldY]\n );\n // 计算回归线起点和终点\n const x1 = min(data, fieldX);\n const x2 = max(data, fieldX);\n\n const predict1 = predict(x1);\n const predict2 = predict(x2);\n return [\n {\n [fieldX]: x1,\n [fieldY]: predict1\n },\n {\n [fieldX]: x2,\n [fieldY]: predict2\n }\n ];\n}\n\n/**\n * 计算对应角度下的半径轴标签定位属性\n * @param angle 弧度角,需要注意是逆时针计算的\n * @returns\n */\nexport function radiusLabelOrientAttribute(angle: number) {\n let align: TextAlign = 'center';\n let baseline: TextBaseLine = 'middle';\n\n angle = normalizeAngle(angle);\n\n // right: 7/6 - 11/6; left: 1/6 - 5/6; center: 11/6 - 1/6 & 5/6 - 7/6\n if (angle >= Math.PI * (7 / 6) && angle <= Math.PI * (11 / 6)) {\n align = 'right';\n } else if (angle >= Math.PI * (1 / 6) && angle <= Math.PI * (5 / 6)) {\n align = 'left';\n } else {\n align = 'center';\n }\n\n // bottom: 5/3 - 1/3; top: 2/3 - 4/3; middle: 5/3 - 1/3 & 2/3 - 4/3\n if (angle >= Math.PI * (5 / 3) || angle <= Math.PI * (1 / 3)) {\n baseline = 'bottom';\n } else if (angle >= Math.PI * (2 / 3) && angle <= Math.PI * (4 / 3)) {\n baseline = 'top';\n } else {\n baseline = 'middle';\n }\n\n return { align, baseline };\n}\n\n/** 求一个向量顺时针旋转到另一个向量的角度,带正负号 */\nexport function vectorAngle(v1: IPoint, v2: IPoint) {\n const v1Length = distance(v1);\n const v2Length = distance(v2);\n // 叉乘\n const rho = Math.asin((v1.x * v2.y - v2.x * v1.y) / v1Length / v2Length);\n // 点乘\n const theta = Math.acos((v1.x * v2.x + v1.y * v2.y) / v1Length / v2Length);\n if (rho < 0) {\n return -theta;\n }\n return theta;\n}\n\n/** 求两个点的距离 */\nexport function distance(p1: IPoint, p2: IPoint = { x: 0, y: 0 }) {\n return PointService.distancePP(p1, p2);\n}\n"]}
1
+ {"version":3,"sources":["../src/util/math.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EACL,aAAa,EACb,SAAS,EACT,MAAM,EACN,OAAO,EACP,YAAY,EACZ,MAAM,IAAI,SAAS,EACnB,UAAU,EACV,UAAU,EACX,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AACvF,MAAM,CAAC,MAAM,OAAO,GAAG,aAAa,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,yBAAyB,EAAE,CAAC;AAOxE,MAAM,UAAU,gBAAgB,CAAC,KAAkB;IACjD,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;QACjB,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;KACvB;IACD,OAAO;QACL,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,MAAM;QACvC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,MAAM;KACxC,CAAC;AACJ,CAAC;AAQD,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IAC9B,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE;QACrC,OAAO,CAAC,CAAC;KACV;SAAM,IAAI,KAAK,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,EAAE,EAAE;QAClD,OAAO,CAAC,CAAC;KACV;SAAM,IAAI,KAAK,GAAG,IAAI,CAAC,EAAE,IAAI,KAAK,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;QACxD,OAAO,CAAC,CAAC;KACV;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAQD,MAAM,UAAU,sBAAsB,CACpC,KAAoB,EACpB,GAAkB;IAElB,IAAI,UAAU,GAAW,CAAC,CAAC;IAC3B,IAAI,QAAQ,GAAW,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;IACnC,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IACpC,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,CAAC,YAAY,IAAI,CAAC,UAAU,EAAE;QAChC,UAAU,GAAG,CAAC,CAAC;QACf,QAAQ,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;KACxB;SAAM,IAAI,CAAC,UAAU,EAAE;QACtB,UAAU,GAAG,KAAe,CAAC;QAC7B,QAAQ,GAAI,KAAgB,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;KAC5C;SAAM,IAAI,CAAC,YAAY,EAAE;QACxB,UAAU,GAAI,GAAc,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;QAC3C,QAAQ,GAAG,GAAa,CAAC;KAC1B;SAAM;QACL,UAAU,GAAG,KAAe,CAAC;QAC7B,QAAQ,GAAG,GAAa,CAAC;KAC1B;IAED,OAAO,QAAQ,IAAI,UAAU,EAAE;QAC7B,QAAQ,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;KACzB;IACD,OAAO,UAAU,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE;QAC/B,UAAU,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;QAC1B,QAAQ,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;KACzB;IACD,OAAO,QAAQ,GAAG,CAAC,EAAE;QACnB,UAAU,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;QAC1B,QAAQ,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;KACzB;IACD,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,MAAmB,EAAE,CAAS,EAAE,CAAS;IACnE,OAAO,MAAM,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC;AAC1E,CAAC;AACD,MAAM,UAAU,GAAG,CAAC,IAAW,EAAE,KAAc;IAC7C,OAAO,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5E,CAAC;AAED,MAAM,UAAU,GAAG,CAAC,IAAW,EAAE,KAAc;IAC7C,OAAO,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5E,CAAC;AAED,MAAM,UAAU,GAAG,CAAC,IAAW,EAAE,KAAc;IAC7C,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;QAC/B,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACzC,IAAI,aAAa,CAAC,GAAG,CAAC,EAAE;YACtB,GAAG,IAAI,GAAG,CAAC;SACZ;QACD,OAAO,GAAG,CAAC;IACb,CAAC,EAAE,CAAC,CAAC,CAAC;AACR,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,IAAW,EAAE,KAAc;IACjD,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,CAAC,OAAO,CAAC,CAAC,CAAM,EAAE,EAAE;QACtB,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjC,IAAI,aAAa,CAAC,CAAC,CAAC,EAAE;YACpB,GAAG,IAAI,CAAC,CAAC;YACT,KAAK,EAAE,CAAC;SACT;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,GAAG,GAAG,KAAK,CAAC;IAC5B,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,IAAW,EAAE,KAAc;IAClD,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAE3C,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE;QACpB,OAAO,CAAC,CAAC;KACV;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IACpG,MAAM,KAAK,GAAG,KAAK,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACxC,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAW,EAAE,KAAc;IAC3D,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;IAC/C,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,IAAW,EAAE,KAAc;IAChD,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAY,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAClE,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAW,EAAE,MAAe,EAAE,MAAe;IACtE,MAAM,EAAE,OAAO,EAAE,GAAG,gBAAgB,CAClC,IAAI,EACJ,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,EACtB,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CACvB,CAAC;IAEF,MAAM,EAAE,GAAG,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC7B,MAAM,EAAE,GAAG,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAE7B,MAAM,QAAQ,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;IAC7B,MAAM,QAAQ,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;IAC7B,OAAO;QACL;YACE,CAAC,MAAM,CAAC,EAAE,EAAE;YACZ,CAAC,MAAM,CAAC,EAAE,QAAQ;SACnB;QACD;YACE,CAAC,MAAM,CAAC,EAAE,EAAE;YACZ,CAAC,MAAM,CAAC,EAAE,QAAQ;SACnB;KACF,CAAC;AACJ,CAAC;AAOD,MAAM,UAAU,0BAA0B,CAAC,KAAa;IACtD,IAAI,KAAK,GAAc,QAAQ,CAAC;IAChC,IAAI,QAAQ,GAAiB,QAAQ,CAAC;IAEtC,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IAG9B,IAAI,KAAK,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;QAC7D,KAAK,GAAG,OAAO,CAAC;KACjB;SAAM,IAAI,KAAK,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE;QACnE,KAAK,GAAG,MAAM,CAAC;KAChB;SAAM;QACL,KAAK,GAAG,QAAQ,CAAC;KAClB;IAGD,IAAI,KAAK,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE;QAC5D,QAAQ,GAAG,QAAQ,CAAC;KACrB;SAAM,IAAI,KAAK,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE;QACnE,QAAQ,GAAG,KAAK,CAAC;KAClB;SAAM;QACL,QAAQ,GAAG,QAAQ,CAAC;KACrB;IAED,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;AAC7B,CAAC;AAGD,MAAM,UAAU,WAAW,CAAC,EAAU,EAAE,EAAU;IAChD,MAAM,QAAQ,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC9B,MAAM,QAAQ,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAE9B,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,QAAQ,GAAG,QAAQ,CAAC,CAAC;IAEzE,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,QAAQ,GAAG,QAAQ,CAAC,CAAC;IAC3E,IAAI,GAAG,GAAG,CAAC,EAAE;QACX,OAAO,CAAC,KAAK,CAAC;KACf;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAGD,MAAM,UAAU,QAAQ,CAAC,EAAU,EAAE,KAAa,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;IAC9D,OAAO,YAAY,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AACzC,CAAC","file":"math.js","sourcesContent":["import type { IBoundsLike } from '@visactor/vutils';\nimport type { IPoint, IPolarPoint, Quadrant, TextAlign, TextBaseLine } from '../typings';\nimport type { Datum } from '@visactor/vgrammar-core';\nimport { isValidNumber } from './type';\nimport { regressionLinear } from '@visactor/vgrammar-util';\nimport {\n isNumberClose,\n isGreater,\n isLess,\n isValid,\n PointService,\n median as visMedian,\n maxInArray,\n minInArray\n} from '@visactor/vutils';\nimport { normalizeAngle, angleLabelOrientAttribute } from '@visactor/vutils-extension';\nexport const isClose = isNumberClose;\nexport { isGreater, isLess, normalizeAngle, angleLabelOrientAttribute };\n\n/**\n * 极坐标系 -> 直角坐标系\n * @param point\n * @returns\n */\nexport function polarToCartesian(point: IPolarPoint): IPoint {\n if (!point.radius) {\n return { x: 0, y: 0 };\n }\n return {\n x: Math.cos(point.angle) * point.radius,\n y: Math.sin(point.angle) * point.radius\n };\n}\n\n/**\n * 根据角度计算象限\n * 计算角度所在象限\n * @param angle\n * @returns\n */\nexport function computeQuadrant(angle: number): Quadrant {\n angle = normalizeAngle(angle);\n if (angle > 0 && angle <= Math.PI / 2) {\n return 2;\n } else if (angle > Math.PI / 2 && angle <= Math.PI) {\n return 3;\n } else if (angle > Math.PI && angle <= (3 * Math.PI) / 2) {\n return 4;\n }\n return 1;\n}\n\n/**\n * 将角度轴起始角度 & 终结角度标准化\n * @param start\n * @param end\n * @returns\n */\nexport function normalizeStartEndAngle(\n start: number | null,\n end: number | null\n): { startAngle: number; endAngle: number } {\n let startAngle: number = 0;\n let endAngle: number = Math.PI * 2;\n const isStartValid = isValid(start);\n const isEndValid = isValid(end);\n if (!isStartValid && !isEndValid) {\n startAngle = 0;\n endAngle = Math.PI * 2;\n } else if (!isEndValid) {\n startAngle = start as number;\n endAngle = (start as number) + Math.PI * 2;\n } else if (!isStartValid) {\n startAngle = (end as number) - Math.PI * 2;\n endAngle = end as number;\n } else {\n startAngle = start as number;\n endAngle = end as number;\n }\n\n while (endAngle <= startAngle) {\n endAngle += Math.PI * 2;\n }\n while (startAngle > Math.PI * 2) {\n startAngle -= Math.PI * 2;\n endAngle -= Math.PI * 2;\n }\n while (endAngle < 0) {\n startAngle += Math.PI * 2;\n endAngle += Math.PI * 2;\n }\n return { startAngle, endAngle };\n}\n\nexport function outOfBounds(bounds: IBoundsLike, x: number, y: number) {\n return bounds.x1 > x || bounds.x2 < x || bounds.y1 > y || bounds.y2 < y;\n}\nexport function min(data: any[], field?: string): number {\n return minInArray(data.map(d => +d[field]).filter(d => isValidNumber(d)));\n}\n\nexport function max(data: any[], field?: string): number {\n return maxInArray(data.map(d => +d[field]).filter(d => isValidNumber(d)));\n}\n\nexport function sum(data: any[], field?: string): number {\n return data.reduce((pre, _cur) => {\n const cur = field ? +_cur[field] : +_cur;\n if (isValidNumber(cur)) {\n pre += cur;\n }\n return pre;\n }, 0);\n}\n\nexport function average(data: any[], field?: string): number {\n let sum = 0;\n let count = 0;\n data.forEach((x: any) => {\n const v = field ? +x[field] : +x;\n if (isValidNumber(v)) {\n sum += v;\n count++;\n }\n });\n\n const average = sum / count;\n return average;\n}\n\nexport function variance(data: any[], field?: string): number {\n const averageNumber = average(data, field);\n\n if (data.length <= 1) {\n return 0;\n }\n\n const total = data.reduce((sum, cur) => sum + (field ? +cur[field] : +cur - averageNumber) ** 2, 0);\n const value = total / (data.length - 1);\n return value;\n}\n\nexport function standardDeviation(data: any[], field?: string): number {\n const value = Math.sqrt(variance(data, field));\n return value;\n}\n\nexport function median(data: any[], field?: string): number {\n const value = visMedian(data.map((datum: Datum) => datum[field]));\n return value;\n}\n\nexport function regression(data: any[], fieldX?: string, fieldY?: string): any[] {\n const { predict } = regressionLinear(\n data,\n datum => datum[fieldX],\n datum => datum[fieldY]\n );\n // 计算回归线起点和终点\n const x1 = min(data, fieldX);\n const x2 = max(data, fieldX);\n\n const predict1 = predict(x1);\n const predict2 = predict(x2);\n return [\n {\n [fieldX]: x1,\n [fieldY]: predict1\n },\n {\n [fieldX]: x2,\n [fieldY]: predict2\n }\n ];\n}\n\n/**\n * 计算对应角度下的半径轴标签定位属性\n * @param angle 弧度角,需要注意是逆时针计算的\n * @returns\n */\nexport function radiusLabelOrientAttribute(angle: number) {\n let align: TextAlign = 'center';\n let baseline: TextBaseLine = 'middle';\n\n angle = normalizeAngle(angle);\n\n // right: 7/6 - 11/6; left: 1/6 - 5/6; center: 11/6 - 1/6 & 5/6 - 7/6\n if (angle >= Math.PI * (7 / 6) && angle <= Math.PI * (11 / 6)) {\n align = 'right';\n } else if (angle >= Math.PI * (1 / 6) && angle <= Math.PI * (5 / 6)) {\n align = 'left';\n } else {\n align = 'center';\n }\n\n // bottom: 5/3 - 1/3; top: 2/3 - 4/3; middle: 5/3 - 1/3 & 2/3 - 4/3\n if (angle >= Math.PI * (5 / 3) || angle <= Math.PI * (1 / 3)) {\n baseline = 'bottom';\n } else if (angle >= Math.PI * (2 / 3) && angle <= Math.PI * (4 / 3)) {\n baseline = 'top';\n } else {\n baseline = 'middle';\n }\n\n return { align, baseline };\n}\n\n/** 求一个向量顺时针旋转到另一个向量的角度,带正负号 */\nexport function vectorAngle(v1: IPoint, v2: IPoint) {\n const v1Length = distance(v1);\n const v2Length = distance(v2);\n // 叉乘\n const rho = Math.asin((v1.x * v2.y - v2.x * v1.y) / v1Length / v2Length);\n // 点乘\n const theta = Math.acos((v1.x * v2.x + v1.y * v2.y) / v1Length / v2Length);\n if (rho < 0) {\n return -theta;\n }\n return theta;\n}\n\n/** 求两个点的距离 */\nexport function distance(p1: IPoint, p2: IPoint = { x: 0, y: 0 }) {\n return PointService.distancePP(p1, p2);\n}\n"]}
@@ -1,3 +1,6 @@
1
1
  import { type Maybe } from '@visactor/vutils';
2
- import type { ITheme } from '../../theme';
2
+ import type { IGlobalMarkThemeByName, IGlobalMarkThemeByType, ITheme } from '../../theme';
3
+ import type { IThemeColorScheme } from '../../theme/color-scheme/interface';
3
4
  export declare function mergeTheme(target: Maybe<ITheme>, ...sources: Maybe<ITheme>[]): Maybe<ITheme>;
5
+ export declare function transformColorSchemeToMerge(colorScheme?: Maybe<IThemeColorScheme>): Maybe<IThemeColorScheme>;
6
+ export declare function transformSeriesThemeToMerge(seriesTheme: any, seriesType: string, markByType: IGlobalMarkThemeByType, markByName: IGlobalMarkThemeByName): any;
@@ -12,23 +12,31 @@ export function mergeTheme(target, ...sources) {
12
12
 
13
13
  function transformThemeToMerge(theme) {
14
14
  if (!theme) return theme;
15
- let {colorScheme: colorScheme} = theme;
16
- colorScheme && (colorScheme = Object.keys(colorScheme).reduce(((scheme, key) => {
17
- const value = colorScheme[key];
18
- return scheme[key] = transformColorSchemeToStandardStruct(value), scheme;
19
- }), {}));
15
+ const colorScheme = transformColorSchemeToMerge(theme.colorScheme);
20
16
  let {series: series} = theme;
21
17
  const {mark: markByType, markByName: markByName} = theme;
22
18
  return (markByType || markByName) && (series = Object.keys(seriesMarkInfoMap).reduce(((newSeriesTheme, key) => {
23
19
  var _a;
24
- const value = null !== (_a = null == series ? void 0 : series[key]) && void 0 !== _a ? _a : {}, newValue = {};
25
- return Object.values(seriesMarkInfoMap[key]).forEach((({type: type, name: name}) => {
26
- var _a, _b;
27
- newValue[name] = mergeSpec({}, null !== (_a = null == markByType ? void 0 : markByType[array(type)[0]]) && void 0 !== _a ? _a : {}, null !== (_b = null == markByName ? void 0 : markByName[name]) && void 0 !== _b ? _b : {}, value[name]);
28
- })), newSeriesTheme[key] = Object.assign(Object.assign({}, value), newValue), newSeriesTheme;
20
+ const value = null !== (_a = null == series ? void 0 : series[key]) && void 0 !== _a ? _a : {};
21
+ return newSeriesTheme[key] = transformSeriesThemeToMerge(value, key, markByType, markByName),
22
+ newSeriesTheme;
29
23
  }), {})), Object.assign(Object.assign({}, theme), {
30
24
  colorScheme: colorScheme,
31
25
  series: series
32
26
  });
33
27
  }
28
+
29
+ export function transformColorSchemeToMerge(colorScheme) {
30
+ return colorScheme && (colorScheme = Object.keys(colorScheme).reduce(((scheme, key) => {
31
+ const value = colorScheme[key];
32
+ return scheme[key] = transformColorSchemeToStandardStruct(value), scheme;
33
+ }), {})), colorScheme;
34
+ }
35
+
36
+ export function transformSeriesThemeToMerge(seriesTheme, seriesType, markByType, markByName) {
37
+ const newTheme = {};
38
+ return Object.values(seriesMarkInfoMap[seriesType]).forEach((({type: type, name: name}) => {
39
+ newTheme[name] = mergeSpec({}, null == markByType ? void 0 : markByType[array(type)[0]], null == markByName ? void 0 : markByName[name], null == seriesTheme ? void 0 : seriesTheme[name]);
40
+ })), Object.assign(Object.assign({}, seriesTheme), newTheme);
41
+ }
34
42
  //# sourceMappingURL=merge-theme.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/util/spec/merge-theme.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAErD,OAAO,EAAE,oCAAoC,EAAE,MAAM,+BAA+B,CAAC;AAIrF,OAAO,EAAE,iBAAiB,EAAwB,MAAM,wBAAwB,CAAC;AACjF,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,MAAM,UAAU,UAAU,CAAC,MAAqB,EAAE,GAAG,OAAwB;IAC3E,OAAO,SAAS,CAAC,qBAAqB,CAAC,MAAM,CAAC,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC;AACzF,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAqB;IAClD,IAAI,CAAC,KAAK,EAAE;QACV,OAAO,KAAK,CAAC;KACd;IAGD,IAAI,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC;IAC5B,IAAI,WAAW,EAAE;QACf,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,CAAoB,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;YAC/E,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;YAC/B,MAAM,CAAC,GAAG,CAAC,GAAG,oCAAoC,CAAC,KAAK,CAAC,CAAC;YAC1D,OAAO,MAAM,CAAC;QAChB,CAAC,EAAE,EAAuB,CAAC,CAAC;KAC7B;IAGD,IAAI,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IACvB,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC;IAC/C,IAAI,UAAU,IAAI,UAAU,EAAE;QAC5B,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC,cAAc,EAAE,GAAG,EAAE,EAAE;;YACrE,MAAM,KAAK,GAAG,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAG,GAAG,CAAC,mCAAI,EAAE,CAAC;YAClC,MAAM,QAAQ,GAAG,EAAE,CAAC;YACpB,MAAM,CAAC,MAAM,CAAkB,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE;;gBAChF,QAAQ,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,EAAE,EAAE,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,mCAAI,EAAE,EAAE,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAG,IAAI,CAAC,mCAAI,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YAC5G,CAAC,CAAC,CAAC;YACH,cAAc,CAAC,GAAG,CAAC,mCACd,KAAK,GACL,QAAQ,CACZ,CAAC;YACF,OAAO,cAAc,CAAC;QACxB,CAAC,EAAE,EAAkB,CAAC,CAAC;KACxB;IAED,uCACK,KAAK,KACR,WAAW;QACX,MAAM,IACN;AACJ,CAAC","file":"merge-theme.js","sourcesContent":["import { type Maybe, array } from '@visactor/vutils';\nimport type { ITheme } from '../../theme';\nimport { transformColorSchemeToStandardStruct } from '../../theme/color-scheme/util';\nimport type { IThemeColorScheme } from '../../theme/color-scheme/interface';\nimport type { ISeriesTheme } from '../../series/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { seriesMarkInfoMap, type ISeriesMarkInfo } from '../../series/interface';\nimport { mergeSpec } from './merge-spec';\n\nexport function mergeTheme(target: Maybe<ITheme>, ...sources: Maybe<ITheme>[]): Maybe<ITheme> {\n return mergeSpec(transformThemeToMerge(target), ...sources.map(transformThemeToMerge));\n}\n\nfunction transformThemeToMerge(theme?: Maybe<ITheme>): Maybe<ITheme> {\n if (!theme) {\n return theme;\n }\n\n // 将色板转化为标准形式\n let { colorScheme } = theme;\n if (colorScheme) {\n colorScheme = Object.keys(colorScheme).reduce<IThemeColorScheme>((scheme, key) => {\n const value = colorScheme[key];\n scheme[key] = transformColorSchemeToStandardStruct(value);\n return scheme;\n }, {} as IThemeColorScheme);\n }\n\n // 将全局 mark 主题 merge 进系列主题\n let { series } = theme;\n const { mark: markByType, markByName } = theme;\n if (markByType || markByName) {\n series = Object.keys(seriesMarkInfoMap).reduce((newSeriesTheme, key) => {\n const value = series?.[key] ?? {};\n const newValue = {};\n Object.values<ISeriesMarkInfo>(seriesMarkInfoMap[key]).forEach(({ type, name }) => {\n newValue[name] = mergeSpec({}, markByType?.[array(type)[0]] ?? {}, markByName?.[name] ?? {}, value[name]);\n });\n newSeriesTheme[key] = {\n ...value,\n ...newValue\n };\n return newSeriesTheme;\n }, {} as ISeriesTheme);\n }\n\n return {\n ...theme,\n colorScheme,\n series\n };\n}\n"]}
1
+ {"version":3,"sources":["../src/util/spec/merge-theme.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAErD,OAAO,EAAE,oCAAoC,EAAE,MAAM,+BAA+B,CAAC;AAIrF,OAAO,EAAE,iBAAiB,EAAwB,MAAM,wBAAwB,CAAC;AACjF,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,MAAM,UAAU,UAAU,CAAC,MAAqB,EAAE,GAAG,OAAwB;IAC3E,OAAO,SAAS,CAAC,qBAAqB,CAAC,MAAM,CAAC,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC;AACzF,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAqB;IAClD,IAAI,CAAC,KAAK,EAAE;QACV,OAAO,KAAK,CAAC;KACd;IAGD,MAAM,WAAW,GAAG,2BAA2B,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAGnE,IAAI,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IACvB,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC;IAC/C,IAAI,UAAU,IAAI,UAAU,EAAE;QAC5B,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC,cAAc,EAAE,GAAG,EAAE,EAAE;;YACrE,MAAM,KAAK,GAAG,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAG,GAAG,CAAC,mCAAI,EAAE,CAAC;YAClC,cAAc,CAAC,GAAG,CAAC,GAAG,2BAA2B,CAAC,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;YACtF,OAAO,cAAc,CAAC;QACxB,CAAC,EAAE,EAAkB,CAAC,CAAC;KACxB;IAED,uCACK,KAAK,KACR,WAAW;QACX,MAAM,IACN;AACJ,CAAC;AAGD,MAAM,UAAU,2BAA2B,CAAC,WAAsC;IAChF,IAAI,WAAW,EAAE;QACf,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,CAAoB,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;YAC/E,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;YAC/B,MAAM,CAAC,GAAG,CAAC,GAAG,oCAAoC,CAAC,KAAK,CAAC,CAAC;YAC1D,OAAO,MAAM,CAAC;QAChB,CAAC,EAAE,EAAuB,CAAC,CAAC;KAC7B;IACD,OAAO,WAAW,CAAC;AACrB,CAAC;AAGD,MAAM,UAAU,2BAA2B,CACzC,WAAgB,EAChB,UAAkB,EAClB,UAAkC,EAClC,UAAkC;IAElC,MAAM,QAAQ,GAAQ,EAAE,CAAC;IACzB,MAAM,CAAC,MAAM,CAAkB,iBAAiB,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE;QACvF,QAAQ,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,EAAE,EAAE,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAG,IAAI,CAAC,EAAE,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAG,IAAI,CAAC,CAAC,CAAC;IACxG,CAAC,CAAC,CAAC;IACH,uCACK,WAAW,GACX,QAAQ,EACX;AACJ,CAAC","file":"merge-theme.js","sourcesContent":["import { type Maybe, array } from '@visactor/vutils';\nimport type { IGlobalMarkThemeByName, IGlobalMarkThemeByType, ITheme } from '../../theme';\nimport { transformColorSchemeToStandardStruct } from '../../theme/color-scheme/util';\nimport type { IThemeColorScheme } from '../../theme/color-scheme/interface';\nimport type { ISeriesTheme } from '../../series/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { seriesMarkInfoMap, type ISeriesMarkInfo } from '../../series/interface';\nimport { mergeSpec } from './merge-spec';\n\nexport function mergeTheme(target: Maybe<ITheme>, ...sources: Maybe<ITheme>[]): Maybe<ITheme> {\n return mergeSpec(transformThemeToMerge(target), ...sources.map(transformThemeToMerge));\n}\n\nfunction transformThemeToMerge(theme?: Maybe<ITheme>): Maybe<ITheme> {\n if (!theme) {\n return theme;\n }\n\n // 将色板转化为标准形式\n const colorScheme = transformColorSchemeToMerge(theme.colorScheme);\n\n // 将全局 mark 主题 merge 进系列主题\n let { series } = theme;\n const { mark: markByType, markByName } = theme;\n if (markByType || markByName) {\n series = Object.keys(seriesMarkInfoMap).reduce((newSeriesTheme, key) => {\n const value = series?.[key] ?? {};\n newSeriesTheme[key] = transformSeriesThemeToMerge(value, key, markByType, markByName);\n return newSeriesTheme;\n }, {} as ISeriesTheme);\n }\n\n return {\n ...theme,\n colorScheme,\n series\n };\n}\n\n/** 将色板转化为标准形式 */\nexport function transformColorSchemeToMerge(colorScheme?: Maybe<IThemeColorScheme>): Maybe<IThemeColorScheme> {\n if (colorScheme) {\n colorScheme = Object.keys(colorScheme).reduce<IThemeColorScheme>((scheme, key) => {\n const value = colorScheme[key];\n scheme[key] = transformColorSchemeToStandardStruct(value);\n return scheme;\n }, {} as IThemeColorScheme);\n }\n return colorScheme;\n}\n\n/** 将全局 mark 主题 merge 进系列主题 */\nexport function transformSeriesThemeToMerge(\n seriesTheme: any,\n seriesType: string,\n markByType: IGlobalMarkThemeByType,\n markByName: IGlobalMarkThemeByName\n): any {\n const newTheme: any = {};\n Object.values<ISeriesMarkInfo>(seriesMarkInfoMap[seriesType]).forEach(({ type, name }) => {\n newTheme[name] = mergeSpec({}, markByType?.[array(type)[0]], markByName?.[name], seriesTheme?.[name]);\n });\n return {\n ...seriesTheme,\n ...newTheme\n };\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { isArray, isFunction, isObject, isString, isValid, isValidNumber } from "@visactor/vutils";
1
+ import { isArray, isFunction, isNil, isObject, isString, isValid, isValidNumber } from "@visactor/vutils";
2
2
 
3
3
  import { seriesMarkNameSet } from "../../series/interface";
4
4
 
@@ -9,6 +9,7 @@ import { getActualColor, isColorKey } from "../../theme/color-scheme/util";
9
9
  import { normalizeLayoutPaddingSpec } from "../space";
10
10
 
11
11
  export function preprocessSpecOrTheme(type, obj, colorScheme, seriesType) {
12
+ if (isNil(obj)) return obj;
12
13
  if (isArray(obj)) return obj.map((element => isObject(element) && !isFunction(element) ? preprocessSpecOrTheme(type, element, colorScheme, seriesType) : element));
13
14
  const newObj = {};
14
15
  return Object.keys(obj).forEach((key => {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/util/spec/preprocess.ts"],"names":[],"mappings":"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","file":"preprocess.js","sourcesContent":["import { isArray, isFunction, isObject, isString, isValid, isValidNumber } from '@visactor/vutils';\nimport { seriesMarkNameSet, type SeriesTypeEnum } from '../../series/interface';\nimport type { IThemeColorScheme } from '../../theme/color-scheme/interface';\nimport { isDataView, isHTMLElement } from './common';\nimport { getActualColor, isColorKey } from '../../theme/color-scheme/util';\nimport { normalizeLayoutPaddingSpec } from '../space';\n\n/**\n * 对 spec 或者类 spec 配置(如 theme)进行预处理,如进行语义化颜色的转换等\n * @param type 需要转换的对象类型(spec 或者 theme)\n * @param obj 需要转换的对象\n * @param colorScheme 主题色板\n * @param seriesType 当前系列类型\n * @returns\n */\nexport function preprocessSpecOrTheme(\n type: 'spec' | 'theme' | 'mark-spec' | 'mark-theme',\n obj: any,\n colorScheme?: IThemeColorScheme,\n seriesType?: SeriesTypeEnum\n): any {\n if (isArray(obj)) {\n return obj.map(element => {\n if (isObject(element) && !isFunction(element)) {\n return preprocessSpecOrTheme(type, element, colorScheme, seriesType);\n }\n return element;\n });\n }\n\n const newObj = {};\n Object.keys(obj).forEach(key => {\n const value = obj[key];\n // 绕过数据\n if (key.includes('data')) {\n newObj[key] = value;\n return;\n }\n if (isObject(value)) {\n // 绕过不可深拷贝的对象\n if (isFunction(value) || isDataView(value) || isHTMLElement(value)) {\n newObj[key] = value;\n return;\n }\n if (isColorKey(value)) {\n // 查询、替换语义化颜色\n newObj[key] = getActualColor(value, colorScheme, seriesType);\n } else {\n newObj[key] = preprocessSpecOrTheme(\n seriesMarkNameSet.has(key) ? (type.includes('spec') ? 'mark-spec' : 'mark-theme') : type,\n value,\n colorScheme,\n seriesType\n );\n }\n } else if (!type.includes('mark') && key === 'padding') {\n // 标准化 padding\n newObj[key] = normalizeLayoutPaddingSpec(value);\n } else if (!type.includes('theme') && key === 'lineHeight' && isString(value) && value[value.length - 1] === '%') {\n if (isValid(obj.fontSize)) {\n // 处理 lineHeight 的比例值\n // FIXME: vrender 支持行高字符串后删掉这段逻辑\n const scale = Number.parseFloat(value.substring(0, value.length - 1)) / 100;\n const newValue = obj.fontSize * scale;\n if (isValidNumber(newValue)) {\n newObj[key] = newValue;\n }\n }\n // 如果 spec 同级里没有 fontSize 配置,lineHeight 比例值失效\n } else {\n newObj[key] = value;\n }\n });\n\n return newObj;\n}\n"]}
1
+ {"version":3,"sources":["../src/util/spec/preprocess.ts"],"names":[],"mappings":"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","file":"preprocess.js","sourcesContent":["import { isArray, isFunction, isNil, isObject, isString, isValid, isValidNumber } from '@visactor/vutils';\nimport { seriesMarkNameSet, type SeriesTypeEnum } from '../../series/interface';\nimport type { IThemeColorScheme } from '../../theme/color-scheme/interface';\nimport { isDataView, isHTMLElement } from './common';\nimport { getActualColor, isColorKey } from '../../theme/color-scheme/util';\nimport { normalizeLayoutPaddingSpec } from '../space';\n\n/**\n * 对 spec 或者类 spec 配置(如 theme)进行预处理,如进行语义化颜色的转换等\n * @param type 需要转换的对象类型(spec 或者 theme)\n * @param obj 需要转换的对象\n * @param colorScheme 主题色板\n * @param seriesType 当前系列类型\n * @returns\n */\nexport function preprocessSpecOrTheme(\n type: 'spec' | 'theme' | 'mark-spec' | 'mark-theme',\n obj: any,\n colorScheme?: IThemeColorScheme,\n seriesType?: SeriesTypeEnum\n): any {\n if (isNil(obj)) {\n return obj;\n }\n if (isArray(obj)) {\n return obj.map(element => {\n if (isObject(element) && !isFunction(element)) {\n return preprocessSpecOrTheme(type, element, colorScheme, seriesType);\n }\n return element;\n });\n }\n\n const newObj = {};\n Object.keys(obj).forEach(key => {\n const value = obj[key];\n // 绕过数据\n if (key.includes('data')) {\n newObj[key] = value;\n return;\n }\n if (isObject(value)) {\n // 绕过不可深拷贝的对象\n if (isFunction(value) || isDataView(value) || isHTMLElement(value)) {\n newObj[key] = value;\n return;\n }\n if (isColorKey(value)) {\n // 查询、替换语义化颜色\n newObj[key] = getActualColor(value, colorScheme, seriesType);\n } else {\n newObj[key] = preprocessSpecOrTheme(\n seriesMarkNameSet.has(key) ? (type.includes('spec') ? 'mark-spec' : 'mark-theme') : type,\n value,\n colorScheme,\n seriesType\n );\n }\n } else if (!type.includes('mark') && key === 'padding') {\n // 标准化 padding\n newObj[key] = normalizeLayoutPaddingSpec(value);\n } else if (!type.includes('theme') && key === 'lineHeight' && isString(value) && value[value.length - 1] === '%') {\n if (isValid(obj.fontSize)) {\n // 处理 lineHeight 的比例值\n // FIXME: vrender 支持行高字符串后删掉这段逻辑\n const scale = Number.parseFloat(value.substring(0, value.length - 1)) / 100;\n const newValue = obj.fontSize * scale;\n if (isValidNumber(newValue)) {\n newObj[key] = newValue;\n }\n }\n // 如果 spec 同级里没有 fontSize 配置,lineHeight 比例值失效\n } else {\n newObj[key] = value;\n }\n });\n\n return newObj;\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@visactor/vchart",
3
- "version": "1.5.2-alpha.0",
3
+ "version": "1.5.2-hotfix.0",
4
4
  "description": "charts lib based @visactor/VGrammar",
5
5
  "main": "cjs/index.js",
6
6
  "module": "esm/index.js",
@@ -77,16 +77,16 @@
77
77
  "@size-limit/file": "9.0.0",
78
78
  "@internal/typescript-json-schema": "0.0.1",
79
79
  "@internal/bundler": "0.0.1",
80
- "@internal/eslint-config": "0.0.1",
81
- "@internal/ts-config": "0.0.1"
80
+ "@internal/ts-config": "0.0.1",
81
+ "@internal/eslint-config": "0.0.1"
82
82
  },
83
83
  "dependencies": {
84
84
  "@visactor/vutils": "~0.16.4",
85
85
  "@visactor/vdataset": "~0.16.4",
86
86
  "@visactor/vscale": "~0.16.4",
87
- "@visactor/vrender-core": "0.16.6-alpha.0",
88
- "@visactor/vrender-kits": "0.16.6-alpha.0",
89
- "@visactor/vrender-components": "0.16.6-alpha.0",
87
+ "@visactor/vrender-core": "~0.16.8",
88
+ "@visactor/vrender-kits": "~0.16.8",
89
+ "@visactor/vrender-components": "~0.16.8",
90
90
  "@visactor/vgrammar-core": "~0.8.0",
91
91
  "@visactor/vgrammar-projection": "~0.8.0",
92
92
  "@visactor/vgrammar-wordcloud": "~0.8.0",
@@ -94,7 +94,7 @@
94
94
  "@visactor/vgrammar-hierarchy": "~0.8.0",
95
95
  "@visactor/vgrammar-sankey": "~0.8.0",
96
96
  "@visactor/vgrammar-util": "~0.8.0",
97
- "@visactor/vutils-extension": "1.5.2-alpha.0"
97
+ "@visactor/vutils-extension": "1.5.2-hotfix.0"
98
98
  },
99
99
  "publishConfig": {
100
100
  "access": "public",