@visactor/vrender-core 0.16.19 → 0.16.20-alpha.1

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 (550) hide show
  1. package/cjs/allocator/bounds-allocate.d.ts +13 -0
  2. package/cjs/allocator/bounds-allocate.js +38 -0
  3. package/cjs/allocator/bounds-allocate.js.map +1 -0
  4. package/cjs/allocator/canvas-allocate.d.ts +4 -0
  5. package/cjs/allocator/canvas-allocate.js +19 -6
  6. package/cjs/allocator/canvas-allocate.js.map +1 -1
  7. package/cjs/allocator/graphic-allocate.d.ts +56 -1
  8. package/cjs/allocator/graphic-allocate.js +163 -1
  9. package/cjs/allocator/graphic-allocate.js.map +1 -1
  10. package/cjs/animate/Ticker/default-ticker.js +1 -1
  11. package/cjs/animate/Ticker/default-ticker.js.map +1 -1
  12. package/cjs/animate/config.js +1 -2
  13. package/cjs/animate/custom-animate.js +2 -1
  14. package/cjs/canvas/contributions/base-canvas.js +4 -2
  15. package/cjs/canvas/contributions/base-canvas.js.map +1 -1
  16. package/cjs/common/Reflect-metadata.js +349 -359
  17. package/cjs/common/Reflect-metadata.js.map +1 -1
  18. package/cjs/common/bezier-utils.js +2 -1
  19. package/cjs/common/inversify/annotation/inject.d.ts +1 -0
  20. package/cjs/common/inversify/annotation/inject.js +10 -0
  21. package/cjs/common/inversify/annotation/inject.js.map +1 -0
  22. package/cjs/common/inversify/annotation/inject_base.d.ts +14 -0
  23. package/cjs/common/inversify/annotation/inject_base.js +39 -0
  24. package/cjs/common/inversify/annotation/inject_base.js.map +1 -0
  25. package/cjs/common/inversify/annotation/injectable.d.ts +1 -0
  26. package/cjs/common/{inversify-lite/annotation/post_construct.js → inversify/annotation/injectable.js} +15 -5
  27. package/cjs/common/inversify/annotation/injectable.js.map +1 -0
  28. package/cjs/common/inversify/annotation/multi_inject.d.ts +1 -0
  29. package/cjs/common/inversify/annotation/multi_inject.js +10 -0
  30. package/cjs/common/inversify/annotation/multi_inject.js.map +1 -0
  31. package/cjs/common/inversify/annotation/named.d.ts +1 -0
  32. package/cjs/common/inversify/annotation/named.js +14 -0
  33. package/cjs/common/inversify/annotation/named.js.map +1 -0
  34. package/cjs/common/inversify/binding.d.ts +18 -0
  35. package/cjs/common/inversify/binding.js +26 -0
  36. package/cjs/common/inversify/binding.js.map +1 -0
  37. package/cjs/common/inversify/container.d.ts +28 -0
  38. package/cjs/common/inversify/container.js +155 -0
  39. package/cjs/common/inversify/container.js.map +1 -0
  40. package/cjs/common/inversify/cotainer-module.d.ts +6 -0
  41. package/cjs/common/inversify/cotainer-module.js +16 -0
  42. package/cjs/common/inversify/cotainer-module.js.map +1 -0
  43. package/cjs/common/inversify/index.d.ts +7 -0
  44. package/cjs/common/inversify/index.js +75 -0
  45. package/cjs/common/inversify/index.js.map +1 -0
  46. package/cjs/common/inversify/interfaces.d.ts +218 -0
  47. package/cjs/common/inversify/interfaces.js +6 -0
  48. package/cjs/common/inversify/interfaces.js.map +1 -0
  49. package/cjs/common/inversify/literal_types.d.ts +5 -0
  50. package/cjs/common/inversify/literal_types.js +34 -0
  51. package/cjs/common/inversify/literal_types.js.map +1 -0
  52. package/cjs/common/inversify/meta-data.d.ts +6 -0
  53. package/cjs/common/inversify/meta-data.js +19 -0
  54. package/cjs/common/inversify/meta-data.js.map +1 -0
  55. package/cjs/common/inversify/metadata_keys.d.ts +12 -0
  56. package/cjs/common/inversify/metadata_keys.js +15 -0
  57. package/cjs/common/inversify/metadata_keys.js.map +1 -0
  58. package/cjs/common/inversify/metadata_reader.d.ts +6 -0
  59. package/cjs/common/inversify/metadata_reader.js +28 -0
  60. package/cjs/common/inversify/metadata_reader.js.map +1 -0
  61. package/cjs/common/inversify/syntax/binding_in_syntax.d.ts +10 -0
  62. package/cjs/common/inversify/syntax/binding_in_syntax.js +29 -0
  63. package/cjs/common/inversify/syntax/binding_in_syntax.js.map +1 -0
  64. package/cjs/common/inversify/syntax/binding_to_syntax.d.ts +12 -0
  65. package/cjs/common/inversify/syntax/binding_to_syntax.js +40 -0
  66. package/cjs/common/inversify/syntax/binding_to_syntax.js.map +1 -0
  67. package/cjs/common/inversify/syntax/constraint_helpers.d.ts +2 -0
  68. package/cjs/common/inversify/syntax/constraint_helpers.js +20 -0
  69. package/cjs/common/inversify/syntax/constraint_helpers.js.map +1 -0
  70. package/cjs/common/inversify-lite/container/container.js +1 -3
  71. package/cjs/common/inversify-lite/container/container.js.map +1 -1
  72. package/cjs/common/inversify-lite/index.d.ts +1 -8
  73. package/cjs/common/inversify-lite/index.js +1 -64
  74. package/cjs/common/inversify-lite/index.js.map +1 -1
  75. package/cjs/common/inversify-lite/interfaces/interfaces.d.ts +0 -2
  76. package/cjs/common/inversify-lite/interfaces/interfaces.js.map +1 -1
  77. package/cjs/common/inversify-lite/planning/queryable_string.d.ts +0 -2
  78. package/cjs/common/inversify-lite/planning/queryable_string.js +0 -10
  79. package/cjs/common/inversify-lite/planning/queryable_string.js.map +1 -1
  80. package/cjs/common/inversify-lite/resolution/resolver.js.map +1 -1
  81. package/cjs/common/shape/rect.js +2 -1
  82. package/cjs/common/shape/rect.js.map +1 -1
  83. package/cjs/common/sort.js +1 -2
  84. package/cjs/common/split-path.js +2 -1
  85. package/cjs/core/contributions/layerHandler/canvas2d-contribution.d.ts +2 -2
  86. package/cjs/core/contributions/layerHandler/canvas2d-contribution.js +4 -9
  87. package/cjs/core/contributions/layerHandler/canvas2d-contribution.js.map +1 -1
  88. package/cjs/core/contributions/layerHandler/empty-contribution.d.ts +2 -2
  89. package/cjs/core/contributions/layerHandler/empty-contribution.js +4 -9
  90. package/cjs/core/contributions/layerHandler/empty-contribution.js.map +1 -1
  91. package/cjs/core/contributions/layerHandler/offscreen2d-contribution.d.ts +2 -2
  92. package/cjs/core/contributions/layerHandler/offscreen2d-contribution.js +4 -9
  93. package/cjs/core/contributions/layerHandler/offscreen2d-contribution.js.map +1 -1
  94. package/cjs/core/contributions/textMeasure/modules.js +1 -2
  95. package/cjs/core/contributions/textMeasure/modules.js.map +1 -1
  96. package/cjs/core/core-modules.js +5 -6
  97. package/cjs/core/core-modules.js.map +1 -1
  98. package/cjs/core/global.d.ts +4 -0
  99. package/cjs/core/global.js +8 -5
  100. package/cjs/core/global.js.map +1 -1
  101. package/cjs/core/graphic-utils.d.ts +7 -4
  102. package/cjs/core/graphic-utils.js +18 -14
  103. package/cjs/core/graphic-utils.js.map +1 -1
  104. package/cjs/core/layer-service.d.ts +5 -2
  105. package/cjs/core/layer-service.js +13 -13
  106. package/cjs/core/layer-service.js.map +1 -1
  107. package/cjs/core/stage.d.ts +7 -4
  108. package/cjs/core/stage.js +38 -34
  109. package/cjs/core/stage.js.map +1 -1
  110. package/cjs/core/window.d.ts +2 -2
  111. package/cjs/core/window.js +7 -12
  112. package/cjs/core/window.js.map +1 -1
  113. package/cjs/event/event-manager.js +3 -2
  114. package/cjs/event/event-manager.js.map +1 -1
  115. package/cjs/graphic/config.d.ts +1 -2
  116. package/cjs/graphic/config.js +7 -5
  117. package/cjs/graphic/config.js.map +1 -1
  118. package/cjs/graphic/graphic-service/arc-contribution.d.ts +1 -5
  119. package/cjs/graphic/graphic-service/arc-contribution.js +0 -18
  120. package/cjs/graphic/graphic-service/arc-contribution.js.map +1 -1
  121. package/cjs/graphic/graphic-service/area-contribution.d.ts +1 -1
  122. package/cjs/graphic/graphic-service/area-contribution.js +1 -4
  123. package/cjs/graphic/graphic-service/area-contribution.js.map +1 -1
  124. package/cjs/graphic/graphic-service/circle-contribution.d.ts +1 -5
  125. package/cjs/graphic/graphic-service/circle-contribution.js +0 -18
  126. package/cjs/graphic/graphic-service/circle-contribution.js.map +1 -1
  127. package/cjs/graphic/graphic-service/common-contribution.js +2 -11
  128. package/cjs/graphic/graphic-service/common-contribution.js.map +1 -1
  129. package/cjs/graphic/graphic-service/graphic-module.js +2 -17
  130. package/cjs/graphic/graphic-service/graphic-module.js.map +1 -1
  131. package/cjs/graphic/graphic-service/graphic-service.d.ts +2 -7
  132. package/cjs/graphic/graphic-service/graphic-service.js +24 -30
  133. package/cjs/graphic/graphic-service/graphic-service.js.map +1 -1
  134. package/cjs/graphic/graphic-service/path-contribution.d.ts +1 -5
  135. package/cjs/graphic/graphic-service/path-contribution.js +0 -18
  136. package/cjs/graphic/graphic-service/path-contribution.js.map +1 -1
  137. package/cjs/graphic/graphic-service/rect-contribution.d.ts +1 -5
  138. package/cjs/graphic/graphic-service/rect-contribution.js +0 -18
  139. package/cjs/graphic/graphic-service/rect-contribution.js.map +1 -1
  140. package/cjs/graphic/graphic-service/symbol-contribution.d.ts +0 -1
  141. package/cjs/graphic/graphic-service/symbol-contribution.js +4 -13
  142. package/cjs/graphic/graphic-service/symbol-contribution.js.map +1 -1
  143. package/cjs/graphic/graphic.js +3 -2
  144. package/cjs/graphic/graphic.js.map +1 -1
  145. package/cjs/graphic/group.d.ts +1 -0
  146. package/cjs/graphic/group.js +7 -3
  147. package/cjs/graphic/group.js.map +1 -1
  148. package/cjs/graphic/rect.d.ts +2 -3
  149. package/cjs/graphic/rect.js +3 -5
  150. package/cjs/graphic/rect.js.map +1 -1
  151. package/cjs/graphic/symbol.js +7 -4
  152. package/cjs/graphic/symbol.js.map +1 -1
  153. package/cjs/graphic/theme.d.ts +4 -4
  154. package/cjs/graphic/theme.js +25 -26
  155. package/cjs/graphic/theme.js.map +1 -1
  156. package/cjs/index.d.ts +2 -0
  157. package/cjs/index.js +1 -0
  158. package/cjs/index.js.map +1 -1
  159. package/cjs/interface/allocator.d.ts +1 -0
  160. package/cjs/interface/allocator.js.map +1 -1
  161. package/cjs/interface/global.d.ts +1 -0
  162. package/cjs/interface/global.js.map +1 -1
  163. package/cjs/interface/graphic/rect.d.ts +2 -0
  164. package/cjs/interface/graphic/rect.js.map +1 -1
  165. package/cjs/interface/graphic.d.ts +1 -4
  166. package/cjs/interface/graphic.js.map +1 -1
  167. package/cjs/interface/render.d.ts +2 -2
  168. package/cjs/interface/render.js.map +1 -1
  169. package/cjs/interface/stage.d.ts +2 -1
  170. package/cjs/interface/stage.js.map +1 -1
  171. package/cjs/modules.d.ts +1 -2
  172. package/cjs/modules.js +8 -8
  173. package/cjs/modules.js.map +1 -1
  174. package/cjs/picker/global-picker-service.d.ts +2 -2
  175. package/cjs/picker/global-picker-service.js +4 -9
  176. package/cjs/picker/global-picker-service.js.map +1 -1
  177. package/cjs/picker/pick-modules.js +2 -4
  178. package/cjs/picker/pick-modules.js.map +1 -1
  179. package/cjs/picker/picker-service.d.ts +2 -2
  180. package/cjs/picker/picker-service.js +6 -6
  181. package/cjs/picker/picker-service.js.map +1 -1
  182. package/cjs/plugins/plugin-modules.js +1 -2
  183. package/cjs/plugins/plugin-modules.js.map +1 -1
  184. package/cjs/render/contributions/render/arc-render.js +2 -1
  185. package/cjs/render/contributions/render/arc-render.js.map +1 -1
  186. package/cjs/render/contributions/render/area-render.d.ts +1 -0
  187. package/cjs/render/contributions/render/area-render.js +44 -6
  188. package/cjs/render/contributions/render/area-render.js.map +1 -1
  189. package/cjs/render/contributions/render/base-render.d.ts +1 -1
  190. package/cjs/render/contributions/render/base-render.js +15 -18
  191. package/cjs/render/contributions/render/base-render.js.map +1 -1
  192. package/cjs/render/contributions/render/circle-render.js +2 -1
  193. package/cjs/render/contributions/render/circle-render.js.map +1 -1
  194. package/cjs/render/contributions/render/contributions/arc-contribution-render.d.ts +3 -7
  195. package/cjs/render/contributions/render/contributions/arc-contribution-render.js +7 -30
  196. package/cjs/render/contributions/render/contributions/arc-contribution-render.js.map +1 -1
  197. package/cjs/render/contributions/render/contributions/area-contribution-render.d.ts +3 -4
  198. package/cjs/render/contributions/render/contributions/area-contribution-render.js +7 -21
  199. package/cjs/render/contributions/render/contributions/area-contribution-render.js.map +1 -1
  200. package/cjs/render/contributions/render/contributions/base-contribution-render.d.ts +2 -0
  201. package/cjs/render/contributions/render/contributions/base-contribution-render.js +9 -9
  202. package/cjs/render/contributions/render/contributions/base-contribution-render.js.map +1 -1
  203. package/cjs/render/contributions/render/contributions/circle-contribution-render.d.ts +3 -7
  204. package/cjs/render/contributions/render/contributions/circle-contribution-render.js +7 -30
  205. package/cjs/render/contributions/render/contributions/circle-contribution-render.js.map +1 -1
  206. package/cjs/render/contributions/render/contributions/constants.d.ts +1 -0
  207. package/cjs/render/contributions/render/contributions/constants.js +2 -2
  208. package/cjs/render/contributions/render/contributions/constants.js.map +1 -1
  209. package/cjs/render/contributions/render/contributions/group-contribution-render.d.ts +1 -0
  210. package/cjs/render/contributions/render/contributions/group-contribution-render.js +6 -12
  211. package/cjs/render/contributions/render/contributions/group-contribution-render.js.map +1 -1
  212. package/cjs/render/contributions/render/contributions/image-contribution-render.d.ts +1 -0
  213. package/cjs/render/contributions/render/contributions/image-contribution-render.js +6 -12
  214. package/cjs/render/contributions/render/contributions/image-contribution-render.js.map +1 -1
  215. package/cjs/render/contributions/render/contributions/path-contribution-render.d.ts +2 -9
  216. package/cjs/render/contributions/render/contributions/path-contribution-render.js +4 -25
  217. package/cjs/render/contributions/render/contributions/path-contribution-render.js.map +1 -1
  218. package/cjs/render/contributions/render/contributions/polygon-contribution-render.d.ts +2 -9
  219. package/cjs/render/contributions/render/contributions/polygon-contribution-render.js +4 -25
  220. package/cjs/render/contributions/render/contributions/polygon-contribution-render.js.map +1 -1
  221. package/cjs/render/contributions/render/contributions/rect-contribution-render.d.ts +5 -7
  222. package/cjs/render/contributions/render/contributions/rect-contribution-render.js +17 -37
  223. package/cjs/render/contributions/render/contributions/rect-contribution-render.js.map +1 -1
  224. package/cjs/render/contributions/render/contributions/symbol-contribution-render.d.ts +3 -7
  225. package/cjs/render/contributions/render/contributions/symbol-contribution-render.js +6 -27
  226. package/cjs/render/contributions/render/contributions/symbol-contribution-render.js.map +1 -1
  227. package/cjs/render/contributions/render/contributions/text-contribution-render.d.ts +8 -1
  228. package/cjs/render/contributions/render/contributions/text-contribution-render.js +25 -1
  229. package/cjs/render/contributions/render/contributions/text-contribution-render.js.map +1 -1
  230. package/cjs/render/contributions/render/draw-contribution.d.ts +7 -6
  231. package/cjs/render/contributions/render/draw-contribution.js +31 -22
  232. package/cjs/render/contributions/render/draw-contribution.js.map +1 -1
  233. package/cjs/render/contributions/render/draw-interceptor.d.ts +9 -1
  234. package/cjs/render/contributions/render/draw-interceptor.js +41 -27
  235. package/cjs/render/contributions/render/draw-interceptor.js.map +1 -1
  236. package/cjs/render/contributions/render/group-render.js +3 -2
  237. package/cjs/render/contributions/render/group-render.js.map +1 -1
  238. package/cjs/render/contributions/render/image-render.js +2 -1
  239. package/cjs/render/contributions/render/image-render.js.map +1 -1
  240. package/cjs/render/contributions/render/incremental-draw-contribution.d.ts +2 -6
  241. package/cjs/render/contributions/render/incremental-draw-contribution.js +8 -11
  242. package/cjs/render/contributions/render/incremental-draw-contribution.js.map +1 -1
  243. package/cjs/render/contributions/render/line-render.d.ts +1 -0
  244. package/cjs/render/contributions/render/line-render.js +21 -6
  245. package/cjs/render/contributions/render/line-render.js.map +1 -1
  246. package/cjs/render/contributions/render/module.js +32 -87
  247. package/cjs/render/contributions/render/module.js.map +1 -1
  248. package/cjs/render/contributions/render/path-render.d.ts +2 -1
  249. package/cjs/render/contributions/render/path-render.js +8 -5
  250. package/cjs/render/contributions/render/path-render.js.map +1 -1
  251. package/cjs/render/contributions/render/polygon-render.js +2 -1
  252. package/cjs/render/contributions/render/polygon-render.js.map +1 -1
  253. package/cjs/render/contributions/render/rect-render.d.ts +2 -1
  254. package/cjs/render/contributions/render/rect-render.js +11 -5
  255. package/cjs/render/contributions/render/rect-render.js.map +1 -1
  256. package/cjs/render/contributions/render/render-slector.d.ts +1 -4
  257. package/cjs/render/contributions/render/render-slector.js +0 -20
  258. package/cjs/render/contributions/render/render-slector.js.map +1 -1
  259. package/cjs/render/contributions/render/richtext-render.d.ts +1 -0
  260. package/cjs/render/contributions/render/richtext-render.js +12 -7
  261. package/cjs/render/contributions/render/richtext-render.js.map +1 -1
  262. package/cjs/render/contributions/render/symbol-render.js +2 -1
  263. package/cjs/render/contributions/render/symbol-render.js.map +1 -1
  264. package/cjs/render/contributions/render/text-render.js +12 -9
  265. package/cjs/render/contributions/render/text-render.js.map +1 -1
  266. package/cjs/render/contributions/render/utils.js +2 -2
  267. package/cjs/render/contributions/render/utils.js.map +1 -1
  268. package/cjs/render/render-modules.js +1 -1
  269. package/cjs/render/render-modules.js.map +1 -1
  270. package/cjs/render/render-service.js +1 -1
  271. package/cjs/render/render-service.js.map +1 -1
  272. package/dist/index.js +5444 -6358
  273. package/dist/index.min.js +1 -1
  274. package/es/allocator/bounds-allocate.d.ts +13 -0
  275. package/es/allocator/bounds-allocate.js +32 -0
  276. package/es/allocator/bounds-allocate.js.map +1 -0
  277. package/es/allocator/canvas-allocate.d.ts +4 -0
  278. package/es/allocator/canvas-allocate.js +19 -6
  279. package/es/allocator/canvas-allocate.js.map +1 -1
  280. package/es/allocator/graphic-allocate.d.ts +56 -1
  281. package/es/allocator/graphic-allocate.js +155 -1
  282. package/es/allocator/graphic-allocate.js.map +1 -1
  283. package/es/animate/Ticker/default-ticker.js +1 -1
  284. package/es/animate/Ticker/default-ticker.js.map +1 -1
  285. package/es/animate/config.js +1 -2
  286. package/es/animate/custom-animate.js +2 -1
  287. package/es/canvas/contributions/base-canvas.js +4 -2
  288. package/es/canvas/contributions/base-canvas.js.map +1 -1
  289. package/es/common/Reflect-metadata.js +349 -359
  290. package/es/common/Reflect-metadata.js.map +1 -1
  291. package/es/common/bezier-utils.js +2 -1
  292. package/es/common/inversify/annotation/inject.d.ts +1 -0
  293. package/es/common/inversify/annotation/inject.js +6 -0
  294. package/es/common/inversify/annotation/inject.js.map +1 -0
  295. package/es/common/inversify/annotation/inject_base.d.ts +14 -0
  296. package/es/common/inversify/annotation/inject_base.js +29 -0
  297. package/es/common/inversify/annotation/inject_base.js.map +1 -0
  298. package/es/common/inversify/annotation/injectable.d.ts +1 -0
  299. package/es/common/inversify/annotation/injectable.js +10 -0
  300. package/es/common/inversify/annotation/injectable.js.map +1 -0
  301. package/es/common/inversify/annotation/multi_inject.d.ts +1 -0
  302. package/es/common/inversify/annotation/multi_inject.js +6 -0
  303. package/es/common/inversify/annotation/multi_inject.js.map +1 -0
  304. package/es/common/inversify/annotation/named.d.ts +1 -0
  305. package/es/common/inversify/annotation/named.js +10 -0
  306. package/es/common/inversify/annotation/named.js.map +1 -0
  307. package/es/common/inversify/binding.d.ts +18 -0
  308. package/es/common/inversify/binding.js +22 -0
  309. package/es/common/inversify/binding.js.map +1 -0
  310. package/es/common/inversify/container.d.ts +28 -0
  311. package/es/common/inversify/container.js +155 -0
  312. package/es/common/inversify/container.js.map +1 -0
  313. package/es/common/inversify/cotainer-module.d.ts +6 -0
  314. package/es/common/inversify/cotainer-module.js +8 -0
  315. package/es/common/inversify/cotainer-module.js.map +1 -0
  316. package/es/common/inversify/index.d.ts +7 -0
  317. package/es/common/inversify/index.js +14 -0
  318. package/es/common/inversify/index.js.map +1 -0
  319. package/es/common/inversify/interfaces.d.ts +218 -0
  320. package/es/common/inversify/interfaces.js +2 -0
  321. package/es/common/inversify/interfaces.js.map +1 -0
  322. package/es/common/inversify/literal_types.d.ts +5 -0
  323. package/es/common/inversify/literal_types.js +20 -0
  324. package/es/common/inversify/literal_types.js.map +1 -0
  325. package/es/common/inversify/meta-data.d.ts +6 -0
  326. package/es/common/inversify/meta-data.js +11 -0
  327. package/es/common/inversify/meta-data.js.map +1 -0
  328. package/es/common/inversify/metadata_keys.d.ts +12 -0
  329. package/es/common/inversify/metadata_keys.js +28 -0
  330. package/es/common/inversify/metadata_keys.js.map +1 -0
  331. package/es/common/inversify/metadata_reader.d.ts +6 -0
  332. package/es/common/inversify/metadata_reader.js +18 -0
  333. package/es/common/inversify/metadata_reader.js.map +1 -0
  334. package/es/common/inversify/syntax/binding_in_syntax.d.ts +10 -0
  335. package/es/common/inversify/syntax/binding_in_syntax.js +24 -0
  336. package/es/common/inversify/syntax/binding_in_syntax.js.map +1 -0
  337. package/es/common/inversify/syntax/binding_to_syntax.d.ts +12 -0
  338. package/es/common/inversify/syntax/binding_to_syntax.js +36 -0
  339. package/es/common/inversify/syntax/binding_to_syntax.js.map +1 -0
  340. package/es/common/inversify/syntax/constraint_helpers.d.ts +2 -0
  341. package/es/common/inversify/syntax/constraint_helpers.js +18 -0
  342. package/es/common/inversify/syntax/constraint_helpers.js.map +1 -0
  343. package/es/common/inversify-lite/container/container.js +2 -4
  344. package/es/common/inversify-lite/container/container.js.map +1 -1
  345. package/es/common/inversify-lite/index.d.ts +1 -8
  346. package/es/common/inversify-lite/index.js +1 -15
  347. package/es/common/inversify-lite/index.js.map +1 -1
  348. package/es/common/inversify-lite/interfaces/interfaces.d.ts +0 -2
  349. package/es/common/inversify-lite/interfaces/interfaces.js.map +1 -1
  350. package/es/common/inversify-lite/planning/queryable_string.d.ts +0 -2
  351. package/es/common/inversify-lite/planning/queryable_string.js +0 -10
  352. package/es/common/inversify-lite/planning/queryable_string.js.map +1 -1
  353. package/es/common/inversify-lite/resolution/resolver.js.map +1 -1
  354. package/es/common/shape/rect.js +2 -1
  355. package/es/common/shape/rect.js.map +1 -1
  356. package/es/common/sort.js +1 -2
  357. package/es/common/split-path.js +2 -1
  358. package/es/core/contributions/layerHandler/canvas2d-contribution.d.ts +2 -2
  359. package/es/core/contributions/layerHandler/canvas2d-contribution.js +5 -9
  360. package/es/core/contributions/layerHandler/canvas2d-contribution.js.map +1 -1
  361. package/es/core/contributions/layerHandler/empty-contribution.d.ts +2 -2
  362. package/es/core/contributions/layerHandler/empty-contribution.js +5 -9
  363. package/es/core/contributions/layerHandler/empty-contribution.js.map +1 -1
  364. package/es/core/contributions/layerHandler/offscreen2d-contribution.d.ts +2 -2
  365. package/es/core/contributions/layerHandler/offscreen2d-contribution.js +5 -9
  366. package/es/core/contributions/layerHandler/offscreen2d-contribution.js.map +1 -1
  367. package/es/core/contributions/textMeasure/modules.js +1 -1
  368. package/es/core/contributions/textMeasure/modules.js.map +1 -1
  369. package/es/core/core-modules.js +4 -6
  370. package/es/core/core-modules.js.map +1 -1
  371. package/es/core/global.d.ts +4 -0
  372. package/es/core/global.js +8 -4
  373. package/es/core/global.js.map +1 -1
  374. package/es/core/graphic-utils.d.ts +7 -4
  375. package/es/core/graphic-utils.js +20 -15
  376. package/es/core/graphic-utils.js.map +1 -1
  377. package/es/core/layer-service.d.ts +5 -2
  378. package/es/core/layer-service.js +14 -13
  379. package/es/core/layer-service.js.map +1 -1
  380. package/es/core/stage.d.ts +7 -4
  381. package/es/core/stage.js +42 -36
  382. package/es/core/stage.js.map +1 -1
  383. package/es/core/window.d.ts +2 -2
  384. package/es/core/window.js +8 -12
  385. package/es/core/window.js.map +1 -1
  386. package/es/event/event-manager.js +3 -2
  387. package/es/event/event-manager.js.map +1 -1
  388. package/es/graphic/config.d.ts +1 -2
  389. package/es/graphic/config.js +6 -6
  390. package/es/graphic/config.js.map +1 -1
  391. package/es/graphic/graphic-service/arc-contribution.d.ts +1 -5
  392. package/es/graphic/graphic-service/arc-contribution.js +0 -15
  393. package/es/graphic/graphic-service/arc-contribution.js.map +1 -1
  394. package/es/graphic/graphic-service/area-contribution.d.ts +1 -1
  395. package/es/graphic/graphic-service/area-contribution.js +2 -1
  396. package/es/graphic/graphic-service/area-contribution.js.map +1 -1
  397. package/es/graphic/graphic-service/circle-contribution.d.ts +1 -5
  398. package/es/graphic/graphic-service/circle-contribution.js +0 -15
  399. package/es/graphic/graphic-service/circle-contribution.js.map +1 -1
  400. package/es/graphic/graphic-service/common-contribution.js +2 -14
  401. package/es/graphic/graphic-service/common-contribution.js.map +1 -1
  402. package/es/graphic/graphic-service/graphic-module.js +1 -23
  403. package/es/graphic/graphic-service/graphic-module.js.map +1 -1
  404. package/es/graphic/graphic-service/graphic-service.d.ts +2 -7
  405. package/es/graphic/graphic-service/graphic-service.js +25 -32
  406. package/es/graphic/graphic-service/graphic-service.js.map +1 -1
  407. package/es/graphic/graphic-service/path-contribution.d.ts +1 -5
  408. package/es/graphic/graphic-service/path-contribution.js +0 -15
  409. package/es/graphic/graphic-service/path-contribution.js.map +1 -1
  410. package/es/graphic/graphic-service/rect-contribution.d.ts +1 -5
  411. package/es/graphic/graphic-service/rect-contribution.js +0 -15
  412. package/es/graphic/graphic-service/rect-contribution.js.map +1 -1
  413. package/es/graphic/graphic-service/symbol-contribution.d.ts +0 -1
  414. package/es/graphic/graphic-service/symbol-contribution.js +2 -16
  415. package/es/graphic/graphic-service/symbol-contribution.js.map +1 -1
  416. package/es/graphic/graphic.js +3 -2
  417. package/es/graphic/graphic.js.map +1 -1
  418. package/es/graphic/group.d.ts +1 -0
  419. package/es/graphic/group.js +8 -1
  420. package/es/graphic/group.js.map +1 -1
  421. package/es/graphic/rect.d.ts +2 -3
  422. package/es/graphic/rect.js +3 -7
  423. package/es/graphic/rect.js.map +1 -1
  424. package/es/graphic/symbol.js +6 -4
  425. package/es/graphic/symbol.js.map +1 -1
  426. package/es/graphic/theme.d.ts +4 -4
  427. package/es/graphic/theme.js +26 -27
  428. package/es/graphic/theme.js.map +1 -1
  429. package/es/index.d.ts +2 -0
  430. package/es/index.js +4 -0
  431. package/es/index.js.map +1 -1
  432. package/es/interface/allocator.d.ts +1 -0
  433. package/es/interface/allocator.js.map +1 -1
  434. package/es/interface/global.d.ts +1 -0
  435. package/es/interface/global.js.map +1 -1
  436. package/es/interface/graphic/rect.d.ts +2 -0
  437. package/es/interface/graphic/rect.js.map +1 -1
  438. package/es/interface/graphic.d.ts +1 -4
  439. package/es/interface/graphic.js.map +1 -1
  440. package/es/interface/render.d.ts +2 -2
  441. package/es/interface/render.js.map +1 -1
  442. package/es/interface/stage.d.ts +2 -1
  443. package/es/interface/stage.js.map +1 -1
  444. package/es/modules.d.ts +1 -2
  445. package/es/modules.js +0 -4
  446. package/es/modules.js.map +1 -1
  447. package/es/picker/global-picker-service.d.ts +2 -2
  448. package/es/picker/global-picker-service.js +5 -9
  449. package/es/picker/global-picker-service.js.map +1 -1
  450. package/es/picker/pick-modules.js +1 -4
  451. package/es/picker/pick-modules.js.map +1 -1
  452. package/es/picker/picker-service.d.ts +2 -2
  453. package/es/picker/picker-service.js +5 -5
  454. package/es/picker/picker-service.js.map +1 -1
  455. package/es/plugins/plugin-modules.js +1 -2
  456. package/es/plugins/plugin-modules.js.map +1 -1
  457. package/es/render/contributions/render/arc-render.js +3 -0
  458. package/es/render/contributions/render/arc-render.js.map +1 -1
  459. package/es/render/contributions/render/area-render.d.ts +1 -0
  460. package/es/render/contributions/render/area-render.js +45 -5
  461. package/es/render/contributions/render/area-render.js.map +1 -1
  462. package/es/render/contributions/render/base-render.d.ts +1 -1
  463. package/es/render/contributions/render/base-render.js +15 -22
  464. package/es/render/contributions/render/base-render.js.map +1 -1
  465. package/es/render/contributions/render/circle-render.js +3 -0
  466. package/es/render/contributions/render/circle-render.js.map +1 -1
  467. package/es/render/contributions/render/contributions/arc-contribution-render.d.ts +3 -7
  468. package/es/render/contributions/render/contributions/arc-contribution-render.js +6 -32
  469. package/es/render/contributions/render/contributions/arc-contribution-render.js.map +1 -1
  470. package/es/render/contributions/render/contributions/area-contribution-render.d.ts +3 -4
  471. package/es/render/contributions/render/contributions/area-contribution-render.js +5 -23
  472. package/es/render/contributions/render/contributions/area-contribution-render.js.map +1 -1
  473. package/es/render/contributions/render/contributions/base-contribution-render.d.ts +2 -0
  474. package/es/render/contributions/render/contributions/base-contribution-render.js +6 -10
  475. package/es/render/contributions/render/contributions/base-contribution-render.js.map +1 -1
  476. package/es/render/contributions/render/contributions/circle-contribution-render.d.ts +3 -7
  477. package/es/render/contributions/render/contributions/circle-contribution-render.js +6 -32
  478. package/es/render/contributions/render/contributions/circle-contribution-render.js.map +1 -1
  479. package/es/render/contributions/render/contributions/constants.d.ts +1 -0
  480. package/es/render/contributions/render/contributions/constants.js +2 -0
  481. package/es/render/contributions/render/contributions/constants.js.map +1 -1
  482. package/es/render/contributions/render/contributions/group-contribution-render.d.ts +1 -0
  483. package/es/render/contributions/render/contributions/group-contribution-render.js +3 -13
  484. package/es/render/contributions/render/contributions/group-contribution-render.js.map +1 -1
  485. package/es/render/contributions/render/contributions/image-contribution-render.d.ts +1 -0
  486. package/es/render/contributions/render/contributions/image-contribution-render.js +4 -14
  487. package/es/render/contributions/render/contributions/image-contribution-render.js.map +1 -1
  488. package/es/render/contributions/render/contributions/path-contribution-render.d.ts +2 -9
  489. package/es/render/contributions/render/contributions/path-contribution-render.js +3 -29
  490. package/es/render/contributions/render/contributions/path-contribution-render.js.map +1 -1
  491. package/es/render/contributions/render/contributions/polygon-contribution-render.d.ts +2 -9
  492. package/es/render/contributions/render/contributions/polygon-contribution-render.js +3 -29
  493. package/es/render/contributions/render/contributions/polygon-contribution-render.js.map +1 -1
  494. package/es/render/contributions/render/contributions/rect-contribution-render.d.ts +5 -7
  495. package/es/render/contributions/render/contributions/rect-contribution-render.js +19 -46
  496. package/es/render/contributions/render/contributions/rect-contribution-render.js.map +1 -1
  497. package/es/render/contributions/render/contributions/symbol-contribution-render.d.ts +3 -7
  498. package/es/render/contributions/render/contributions/symbol-contribution-render.js +6 -24
  499. package/es/render/contributions/render/contributions/symbol-contribution-render.js.map +1 -1
  500. package/es/render/contributions/render/contributions/text-contribution-render.d.ts +8 -1
  501. package/es/render/contributions/render/contributions/text-contribution-render.js +24 -1
  502. package/es/render/contributions/render/contributions/text-contribution-render.js.map +1 -1
  503. package/es/render/contributions/render/draw-contribution.d.ts +7 -6
  504. package/es/render/contributions/render/draw-contribution.js +35 -24
  505. package/es/render/contributions/render/draw-contribution.js.map +1 -1
  506. package/es/render/contributions/render/draw-interceptor.d.ts +9 -1
  507. package/es/render/contributions/render/draw-interceptor.js +38 -35
  508. package/es/render/contributions/render/draw-interceptor.js.map +1 -1
  509. package/es/render/contributions/render/group-render.js +4 -1
  510. package/es/render/contributions/render/group-render.js.map +1 -1
  511. package/es/render/contributions/render/image-render.js +3 -1
  512. package/es/render/contributions/render/image-render.js.map +1 -1
  513. package/es/render/contributions/render/incremental-draw-contribution.d.ts +2 -6
  514. package/es/render/contributions/render/incremental-draw-contribution.js +5 -11
  515. package/es/render/contributions/render/incremental-draw-contribution.js.map +1 -1
  516. package/es/render/contributions/render/line-render.d.ts +1 -0
  517. package/es/render/contributions/render/line-render.js +21 -6
  518. package/es/render/contributions/render/line-render.js.map +1 -1
  519. package/es/render/contributions/render/module.js +29 -83
  520. package/es/render/contributions/render/module.js.map +1 -1
  521. package/es/render/contributions/render/path-render.d.ts +2 -1
  522. package/es/render/contributions/render/path-render.js +8 -4
  523. package/es/render/contributions/render/path-render.js.map +1 -1
  524. package/es/render/contributions/render/polygon-render.js +3 -0
  525. package/es/render/contributions/render/polygon-render.js.map +1 -1
  526. package/es/render/contributions/render/rect-render.d.ts +2 -1
  527. package/es/render/contributions/render/rect-render.js +11 -3
  528. package/es/render/contributions/render/rect-render.js.map +1 -1
  529. package/es/render/contributions/render/render-slector.d.ts +1 -4
  530. package/es/render/contributions/render/render-slector.js +0 -15
  531. package/es/render/contributions/render/render-slector.js.map +1 -1
  532. package/es/render/contributions/render/richtext-render.d.ts +1 -0
  533. package/es/render/contributions/render/richtext-render.js +12 -6
  534. package/es/render/contributions/render/richtext-render.js.map +1 -1
  535. package/es/render/contributions/render/symbol-render.js +3 -0
  536. package/es/render/contributions/render/symbol-render.js.map +1 -1
  537. package/es/render/contributions/render/text-render.js +13 -9
  538. package/es/render/contributions/render/text-render.js.map +1 -1
  539. package/es/render/contributions/render/utils.js +2 -2
  540. package/es/render/contributions/render/utils.js.map +1 -1
  541. package/es/render/render-modules.js +1 -1
  542. package/es/render/render-modules.js.map +1 -1
  543. package/es/render/render-service.js +1 -1
  544. package/es/render/render-service.js.map +1 -1
  545. package/package.json +3 -1
  546. package/cjs/common/inversify-lite/annotation/post_construct.d.ts +0 -4
  547. package/cjs/common/inversify-lite/annotation/post_construct.js.map +0 -1
  548. package/es/common/inversify-lite/annotation/post_construct.d.ts +0 -4
  549. package/es/common/inversify-lite/annotation/post_construct.js +0 -10
  550. package/es/common/inversify-lite/annotation/post_construct.js.map +0 -1
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: !0
5
5
  }), exports.Rect = void 0;
6
6
 
7
- const graphic_1 = require("./graphic"), custom_path2d_1 = require("../common/custom-path2d"), utils_1 = require("../common/utils"), theme_1 = require("./theme"), application_1 = require("../application"), constants_1 = require("./constants"), RECT_UPDATE_TAG_KEY = [ "width", "height", "cornerRadius", ...graphic_1.GRAPHIC_UPDATE_TAG_KEY ];
7
+ const graphic_1 = require("./graphic"), utils_1 = require("../common/utils"), theme_1 = require("./theme"), application_1 = require("../application"), constants_1 = require("./constants"), RECT_UPDATE_TAG_KEY = [ "width", "x1", "y1", "height", "cornerRadius", ...graphic_1.GRAPHIC_UPDATE_TAG_KEY ];
8
8
 
9
9
  class Rect extends graphic_1.Graphic {
10
10
  constructor(params) {
@@ -14,8 +14,7 @@ class Rect extends graphic_1.Graphic {
14
14
  return super.isValid() && this._isValid();
15
15
  }
16
16
  _isValid() {
17
- const {width: width, height: height} = this.attribute;
18
- return this._validNumber(width) && this._validNumber(height);
17
+ return !0;
19
18
  }
20
19
  doUpdateAABBBounds() {
21
20
  const rectTheme = (0, theme_1.getTheme)(this).rect;
@@ -39,8 +38,7 @@ class Rect extends graphic_1.Graphic {
39
38
  return super.needUpdateTag(key, RECT_UPDATE_TAG_KEY);
40
39
  }
41
40
  toCustomPath() {
42
- const attribute = this.attribute, width = attribute.width, height = attribute.height, path = new custom_path2d_1.CustomPath2D;
43
- return path.moveTo(0, 0), path.rect(0, 0, width, height), path;
41
+ throw new Error("暂不支持");
44
42
  }
45
43
  clone() {
46
44
  return new Rect(Object.assign({}, this.attribute));
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/graphic/rect.ts"],"names":[],"mappings":"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","file":"rect.js","sourcesContent":["import type { AABBBounds, OBBBounds } from '@visactor/vutils';\nimport { Graphic, GRAPHIC_UPDATE_TAG_KEY, NOWORK_ANIMATE_ATTR } from './graphic';\nimport type { GraphicType, IRect, IRectGraphicAttribute } from '../interface';\nimport { CustomPath2D } from '../common/custom-path2d';\nimport { parsePadding } from '../common/utils';\nimport { getTheme } from './theme';\nimport { application } from '../application';\nimport { RECT_NUMBER_TYPE } from './constants';\n\nconst RECT_UPDATE_TAG_KEY = ['width', 'height', 'cornerRadius', ...GRAPHIC_UPDATE_TAG_KEY];\n\nexport class Rect extends Graphic<IRectGraphicAttribute> implements IRect {\n type: GraphicType = 'rect';\n\n static NOWORK_ANIMATE_ATTR = NOWORK_ANIMATE_ATTR;\n\n constructor(params: IRectGraphicAttribute) {\n super(params);\n this.numberType = RECT_NUMBER_TYPE;\n }\n\n isValid(): boolean {\n return super.isValid() && this._isValid();\n }\n private _isValid(): boolean {\n const { width, height } = this.attribute;\n return this._validNumber(width) && this._validNumber(height);\n }\n\n protected doUpdateAABBBounds(): AABBBounds {\n const rectTheme = getTheme(this).rect;\n this._AABBBounds.setValue(Infinity, Infinity, -Infinity, -Infinity);\n const attribute = this.attribute;\n const bounds = application.graphicService.updateRectAABBBounds(\n attribute,\n getTheme(this).rect,\n this._AABBBounds,\n this\n ) as AABBBounds;\n\n const { boundsPadding = rectTheme.boundsPadding } = attribute;\n const paddingArray = parsePadding(boundsPadding);\n if (paddingArray) {\n bounds.expand(paddingArray);\n }\n\n this.clearUpdateBoundTag();\n return bounds;\n }\n\n protected tryUpdateOBBBounds(): OBBBounds {\n throw new Error('暂不支持');\n }\n\n getDefaultAttribute(name: string) {\n const rectTheme = getTheme(this).rect;\n return rectTheme[name];\n }\n\n protected needUpdateTags(keys: string[]): boolean {\n return super.needUpdateTags(keys, RECT_UPDATE_TAG_KEY);\n }\n protected needUpdateTag(key: string): boolean {\n return super.needUpdateTag(key, RECT_UPDATE_TAG_KEY);\n }\n\n toCustomPath() {\n const attribute = this.attribute;\n const width = attribute.width;\n const height = attribute.height;\n const x = 0;\n const y = 0;\n\n const path = new CustomPath2D();\n path.moveTo(x, y);\n path.rect(x, y, width, height);\n\n return path;\n }\n\n clone() {\n return new Rect({ ...this.attribute });\n }\n\n getNoWorkAnimateAttr(): Record<string, number> {\n return Rect.NOWORK_ANIMATE_ATTR;\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/graphic/rect.ts"],"names":[],"mappings":";;;AACA,uCAAiF;AAGjF,2CAA+C;AAC/C,mCAAmC;AACnC,gDAA6C;AAC7C,2CAA+C;AAE/C,MAAM,mBAAmB,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,gCAAsB,CAAC,CAAC;AAEvG,MAAa,IAAK,SAAQ,iBAA8B;IAKtD,YAAY,MAA6B;QACvC,KAAK,CAAC,MAAM,CAAC,CAAC;QALhB,SAAI,GAAgB,MAAM,CAAC;QAMzB,IAAI,CAAC,UAAU,GAAG,4BAAgB,CAAC;IACrC,CAAC;IAED,OAAO;QACL,OAAO,KAAK,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC5C,CAAC;IACO,QAAQ;QACd,OAAO,IAAI,CAAC;IAId,CAAC;IAES,kBAAkB;QAC1B,MAAM,SAAS,GAAG,IAAA,gBAAQ,EAAC,IAAI,CAAC,CAAC,IAAI,CAAC;QACtC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC;QACpE,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QACjC,MAAM,MAAM,GAAG,yBAAW,CAAC,cAAc,CAAC,oBAAoB,CAC5D,SAAS,EACT,IAAA,gBAAQ,EAAC,IAAI,CAAC,CAAC,IAAI,EACnB,IAAI,CAAC,WAAW,EAChB,IAAI,CACS,CAAC;QAEhB,MAAM,EAAE,aAAa,GAAG,SAAS,CAAC,aAAa,EAAE,GAAG,SAAS,CAAC;QAC9D,MAAM,YAAY,GAAG,IAAA,oBAAY,EAAC,aAAa,CAAC,CAAC;QACjD,IAAI,YAAY,EAAE;YAChB,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;SAC7B;QAED,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3B,OAAO,MAAM,CAAC;IAChB,CAAC;IAES,kBAAkB;QAC1B,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;IAC1B,CAAC;IAED,mBAAmB,CAAC,IAAY;QAC9B,MAAM,SAAS,GAAG,IAAA,gBAAQ,EAAC,IAAI,CAAC,CAAC,IAAI,CAAC;QACtC,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAES,cAAc,CAAC,IAAc;QACrC,OAAO,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC;IACzD,CAAC;IACS,aAAa,CAAC,GAAW;QACjC,OAAO,KAAK,CAAC,aAAa,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC;IACvD,CAAC;IAED,YAAY;QACV,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;IAY1B,CAAC;IAED,KAAK;QACH,OAAO,IAAI,IAAI,mBAAM,IAAI,CAAC,SAAS,EAAG,CAAC;IACzC,CAAC;IAED,oBAAoB;QAClB,OAAO,IAAI,CAAC,mBAAmB,CAAC;IAClC,CAAC;;AA9EH,oBA+EC;AA5EQ,wBAAmB,GAAG,6BAAmB,CAAC","file":"rect.js","sourcesContent":["import type { AABBBounds, OBBBounds } from '@visactor/vutils';\nimport { Graphic, GRAPHIC_UPDATE_TAG_KEY, NOWORK_ANIMATE_ATTR } from './graphic';\nimport type { GraphicType, ICustomPath2D, IRect, IRectGraphicAttribute } from '../interface';\nimport { CustomPath2D } from '../common/custom-path2d';\nimport { parsePadding } from '../common/utils';\nimport { getTheme } from './theme';\nimport { application } from '../application';\nimport { RECT_NUMBER_TYPE } from './constants';\n\nconst RECT_UPDATE_TAG_KEY = ['width', 'x1', 'y1', 'height', 'cornerRadius', ...GRAPHIC_UPDATE_TAG_KEY];\n\nexport class Rect extends Graphic<IRectGraphicAttribute> implements IRect {\n type: GraphicType = 'rect';\n\n static NOWORK_ANIMATE_ATTR = NOWORK_ANIMATE_ATTR;\n\n constructor(params: IRectGraphicAttribute) {\n super(params);\n this.numberType = RECT_NUMBER_TYPE;\n }\n\n isValid(): boolean {\n return super.isValid() && this._isValid();\n }\n private _isValid(): boolean {\n return true;\n // 暂时不判断,理论上认为都是合法的,节省性能耗时\n // const { width, x1, y1, height } = this.attribute;\n // return (this._validNumber(width) || this._validNumber(x1)) && (this._validNumber(height) || this._validNumber(y1));\n }\n\n protected doUpdateAABBBounds(): AABBBounds {\n const rectTheme = getTheme(this).rect;\n this._AABBBounds.setValue(Infinity, Infinity, -Infinity, -Infinity);\n const attribute = this.attribute;\n const bounds = application.graphicService.updateRectAABBBounds(\n attribute,\n getTheme(this).rect,\n this._AABBBounds,\n this\n ) as AABBBounds;\n\n const { boundsPadding = rectTheme.boundsPadding } = attribute;\n const paddingArray = parsePadding(boundsPadding);\n if (paddingArray) {\n bounds.expand(paddingArray);\n }\n\n this.clearUpdateBoundTag();\n return bounds;\n }\n\n protected tryUpdateOBBBounds(): OBBBounds {\n throw new Error('暂不支持');\n }\n\n getDefaultAttribute(name: string) {\n const rectTheme = getTheme(this).rect;\n return rectTheme[name];\n }\n\n protected needUpdateTags(keys: string[]): boolean {\n return super.needUpdateTags(keys, RECT_UPDATE_TAG_KEY);\n }\n protected needUpdateTag(key: string): boolean {\n return super.needUpdateTag(key, RECT_UPDATE_TAG_KEY);\n }\n\n toCustomPath(): ICustomPath2D {\n throw new Error('暂不支持');\n // const attribute = this.attribute;\n // const width = attribute.width;\n // const height = attribute.height;\n // const x = 0;\n // const y = 0;\n\n // const path = new CustomPath2D();\n // path.moveTo(x, y);\n // path.rect(x, y, width, height);\n\n // return path;\n }\n\n clone() {\n return new Rect({ ...this.attribute });\n }\n\n getNoWorkAnimateAttr(): Record<string, number> {\n return Rect.NOWORK_ANIMATE_ATTR;\n }\n}\n"]}
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: !0
5
5
  }), exports.Symbol = void 0;
6
6
 
7
- const vutils_1 = require("@visactor/vutils"), vutils_2 = require("@visactor/vutils"), builtin_symbol_1 = require("./builtin-symbol"), graphic_1 = require("./graphic"), utils_1 = require("../common/utils"), theme_1 = require("./theme"), application_1 = require("../application"), custom_path2d_1 = require("../common/custom-path2d"), constants_1 = require("./constants"), xml_1 = require("../common/xml"), parser_1 = require("../common/xml/parser"), SYMBOL_UPDATE_TAG_KEY = [ "symbolType", "size", ...graphic_1.GRAPHIC_UPDATE_TAG_KEY ];
7
+ const vutils_1 = require("@visactor/vutils"), vutils_2 = require("@visactor/vutils"), builtin_symbol_1 = require("./builtin-symbol"), graphic_1 = require("./graphic"), utils_1 = require("../common/utils"), theme_1 = require("./theme"), application_1 = require("../application"), custom_path2d_1 = require("../common/custom-path2d"), constants_1 = require("./constants"), xml_1 = require("../common/xml"), parser_1 = require("../common/xml/parser"), _tempBounds = new vutils_1.AABBBounds, SYMBOL_UPDATE_TAG_KEY = [ "symbolType", "size", ...graphic_1.GRAPHIC_UPDATE_TAG_KEY ];
8
8
 
9
9
  class Symbol extends graphic_1.Graphic {
10
10
  constructor(params = {
@@ -33,7 +33,9 @@ class Symbol extends graphic_1.Graphic {
33
33
  if (!0 === (0, parser_1.isSvg)(symbolType)) {
34
34
  const parser = new xml_1.XMLParser, {svg: svg} = parser.parse(symbolType);
35
35
  if (!svg) return null;
36
- const path = (0, vutils_2.isArray)(svg.path) ? svg.path : [ svg.path ], b = new vutils_1.AABBBounds, cacheList = [];
36
+ const path = (0, vutils_2.isArray)(svg.path) ? svg.path : [ svg.path ];
37
+ _tempBounds.clear();
38
+ const cacheList = [];
37
39
  path.forEach((item => {
38
40
  const cache = (new custom_path2d_1.CustomPath2D).fromString(item.d), attribute = {};
39
41
  constants_1.SVG_PARSE_ATTRIBUTE_MAP_KEYS.forEach((k => {
@@ -41,9 +43,10 @@ class Symbol extends graphic_1.Graphic {
41
43
  })), cacheList.push({
42
44
  path: cache,
43
45
  attribute: attribute
44
- }), b.union(cache.bounds);
46
+ }), _tempBounds.union(cache.bounds);
45
47
  }));
46
- const width = b.width(), height = b.height(), scale = 1 / (0, vutils_2.max)(width, height);
48
+ const width = _tempBounds.width(), height = _tempBounds.height(), scale = 1 / (0,
49
+ vutils_2.max)(width, height);
47
50
  return cacheList.forEach((cache => cache.path.transform(0, 0, scale, scale))), this._parsedPath = new builtin_symbol_1.CustomSymbolClass(symbolType, cacheList, !0),
48
51
  Symbol.userSymbolMap[symbolType] = this._parsedPath, this._parsedPath;
49
52
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/graphic/symbol.ts"],"names":[],"mappings":"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","file":"symbol.js","sourcesContent":["import type { OBBBounds } from '@visactor/vutils';\nimport { AABBBounds } from '@visactor/vutils';\nimport { isArray, max } from '@visactor/vutils';\nimport type { ISymbol, ISymbolClass, ISymbolGraphicAttribute } from '../interface';\nimport { builtinSymbolsMap, builtInSymbolStrMap, CustomSymbolClass } from './builtin-symbol';\nimport { Graphic, GRAPHIC_UPDATE_TAG_KEY, NOWORK_ANIMATE_ATTR } from './graphic';\nimport { parsePadding } from '../common/utils';\nimport { getTheme } from './theme';\nimport { application } from '../application';\nimport { CustomPath2D } from '../common/custom-path2d';\nimport { SVG_PARSE_ATTRIBUTE_MAP, SVG_PARSE_ATTRIBUTE_MAP_KEYS, SYMBOL_NUMBER_TYPE } from './constants';\nimport { XMLParser } from '../common/xml';\nimport { isSvg } from '../common/xml/parser';\n\nconst SYMBOL_UPDATE_TAG_KEY = ['symbolType', 'size', ...GRAPHIC_UPDATE_TAG_KEY];\n\n/**\n * symbol\n */\nexport class Symbol extends Graphic<ISymbolGraphicAttribute> implements ISymbol {\n type: 'symbol' = 'symbol';\n\n static userSymbolMap: Record<string, ISymbolClass> = {};\n\n static NOWORK_ANIMATE_ATTR = {\n symbolType: 1,\n ...NOWORK_ANIMATE_ATTR\n };\n\n constructor(params: ISymbolGraphicAttribute = { symbolType: 'circle' }) {\n super(params);\n this.numberType = SYMBOL_NUMBER_TYPE;\n }\n\n protected _parsedPath?: ISymbolClass;\n\n getParsedPath(): ISymbolClass {\n if (this.shouldUpdateShape()) {\n this.doUpdateParsedPath();\n this.clearUpdateShapeTag();\n }\n return this._parsedPath as ISymbolClass;\n }\n\n isValid(): boolean {\n return super.isValid() && this._isValid();\n }\n private _isValid(): boolean {\n const { size } = this.attribute;\n return isArray(size) ? size.length === 2 && size.every(this._validNumber) : this._validNumber(size);\n }\n\n protected doUpdateParsedPath(): ISymbolClass {\n const symbolTheme = getTheme(this).symbol;\n // 查找内置symbol\n let { symbolType = symbolTheme.symbolType } = this.attribute;\n let path = builtinSymbolsMap[symbolType];\n if (path) {\n this._parsedPath = path;\n return path;\n }\n path = Symbol.userSymbolMap[symbolType];\n if (path) {\n this._parsedPath = path;\n return path;\n }\n\n const _symbolType = builtInSymbolStrMap[symbolType];\n symbolType = _symbolType || symbolType;\n // 判断是否是svg\n const valid = isSvg(symbolType);\n if (valid === true) {\n const parser = new XMLParser();\n const { svg } = parser.parse(symbolType);\n if (!svg) {\n return null;\n }\n const path = isArray(svg.path) ? svg.path : [svg.path];\n const b = new AABBBounds();\n const cacheList: { path: CustomPath2D; attribute: Record<string, any> }[] = [];\n path.forEach((item: any) => {\n const cache = new CustomPath2D().fromString(item.d);\n const attribute: any = {};\n SVG_PARSE_ATTRIBUTE_MAP_KEYS.forEach(k => {\n if (item[k]) {\n attribute[SVG_PARSE_ATTRIBUTE_MAP[k]] = item[k];\n }\n });\n // 查找\n cacheList.push({\n path: cache,\n attribute\n });\n b.union(cache.bounds);\n });\n const width = b.width();\n const height = b.height();\n // 规范化到1\n const maxWH = max(width, height);\n const scale = 1 / maxWH;\n cacheList.forEach(cache => cache.path.transform(0, 0, scale, scale));\n\n this._parsedPath = new CustomSymbolClass(symbolType, cacheList, true);\n Symbol.userSymbolMap[symbolType] = this._parsedPath;\n return this._parsedPath;\n }\n\n const cache = new CustomPath2D().fromString(symbolType);\n const width = cache.bounds.width();\n const height = cache.bounds.height();\n // 规范化到1\n const maxWH = max(width, height);\n const scale = 1 / maxWH;\n cache.transform(0, 0, scale, scale);\n this._parsedPath = new CustomSymbolClass(symbolType, cache);\n Symbol.userSymbolMap[symbolType] = this._parsedPath;\n return this._parsedPath;\n }\n\n protected doUpdateAABBBounds(full?: boolean): AABBBounds {\n const symbolTheme = getTheme(this).symbol;\n this._AABBBounds.setValue(Infinity, Infinity, -Infinity, -Infinity);\n const attribute = this.attribute;\n const bounds = application.graphicService.updateSymbolAABBBounds(\n attribute,\n getTheme(this).symbol,\n this._AABBBounds,\n full,\n this\n );\n\n const { boundsPadding = symbolTheme.boundsPadding } = attribute;\n const paddingArray = parsePadding(boundsPadding);\n if (paddingArray) {\n (bounds as AABBBounds).expand(paddingArray);\n }\n\n this.clearUpdateBoundTag();\n return bounds as AABBBounds;\n }\n\n protected tryUpdateOBBBounds(): OBBBounds {\n throw new Error('暂不支持');\n }\n\n getDefaultAttribute(name: string) {\n const symbolTheme = getTheme(this).symbol;\n return symbolTheme[name];\n }\n\n protected needUpdateTags(keys: string[]): boolean {\n return super.needUpdateTags(keys, SYMBOL_UPDATE_TAG_KEY);\n }\n protected needUpdateTag(key: string): boolean {\n return super.needUpdateTag(key, SYMBOL_UPDATE_TAG_KEY);\n }\n\n toCustomPath() {\n const symbolInstance = this.getParsedPath();\n const size = this.attribute.size;\n const x = 0;\n const y = 0;\n const formattedSize = isArray(size) ? size : [size, size];\n\n return symbolInstance.path\n ? new CustomPath2D().fromCustomPath2D(symbolInstance.path, x, y, formattedSize[0], formattedSize[1])\n : new CustomPath2D().fromString(symbolInstance.pathStr, x, y, formattedSize[0], formattedSize[1]);\n }\n\n clone() {\n return new Symbol({ ...this.attribute });\n }\n\n getNoWorkAnimateAttr(): Record<string, number> {\n return Symbol.NOWORK_ANIMATE_ATTR;\n }\n}\n\n// addAttributeToPrototype(DefaultSymbolStyle, Symbol, PURE_STYLE_KEY);\n"]}
1
+ {"version":3,"sources":["../src/graphic/symbol.ts"],"names":[],"mappings":"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","file":"symbol.js","sourcesContent":["import type { OBBBounds } from '@visactor/vutils';\nimport { AABBBounds } from '@visactor/vutils';\nimport { isArray, max } from '@visactor/vutils';\nimport type { ISymbol, ISymbolClass, ISymbolGraphicAttribute } from '../interface';\nimport { builtinSymbolsMap, builtInSymbolStrMap, CustomSymbolClass } from './builtin-symbol';\nimport { Graphic, GRAPHIC_UPDATE_TAG_KEY, NOWORK_ANIMATE_ATTR } from './graphic';\nimport { parsePadding } from '../common/utils';\nimport { getTheme } from './theme';\nimport { application } from '../application';\nimport { CustomPath2D } from '../common/custom-path2d';\nimport { SVG_PARSE_ATTRIBUTE_MAP, SVG_PARSE_ATTRIBUTE_MAP_KEYS, SYMBOL_NUMBER_TYPE } from './constants';\nimport { XMLParser } from '../common/xml';\nimport { isSvg } from '../common/xml/parser';\n\nconst _tempBounds = new AABBBounds();\n\nconst SYMBOL_UPDATE_TAG_KEY = ['symbolType', 'size', ...GRAPHIC_UPDATE_TAG_KEY];\n\n/**\n * symbol\n */\nexport class Symbol extends Graphic<ISymbolGraphicAttribute> implements ISymbol {\n type: 'symbol' = 'symbol';\n\n static userSymbolMap: Record<string, ISymbolClass> = {};\n\n static NOWORK_ANIMATE_ATTR = {\n symbolType: 1,\n ...NOWORK_ANIMATE_ATTR\n };\n\n constructor(params: ISymbolGraphicAttribute = { symbolType: 'circle' }) {\n super(params);\n this.numberType = SYMBOL_NUMBER_TYPE;\n }\n\n protected _parsedPath?: ISymbolClass;\n\n getParsedPath(): ISymbolClass {\n if (this.shouldUpdateShape()) {\n this.doUpdateParsedPath();\n this.clearUpdateShapeTag();\n }\n return this._parsedPath as ISymbolClass;\n }\n\n isValid(): boolean {\n return super.isValid() && this._isValid();\n }\n private _isValid(): boolean {\n const { size } = this.attribute;\n return isArray(size) ? size.length === 2 && size.every(this._validNumber) : this._validNumber(size);\n }\n\n protected doUpdateParsedPath(): ISymbolClass {\n const symbolTheme = getTheme(this).symbol;\n // 查找内置symbol\n let { symbolType = symbolTheme.symbolType } = this.attribute;\n let path = builtinSymbolsMap[symbolType];\n if (path) {\n this._parsedPath = path;\n return path;\n }\n path = Symbol.userSymbolMap[symbolType];\n if (path) {\n this._parsedPath = path;\n return path;\n }\n\n const _symbolType = builtInSymbolStrMap[symbolType];\n symbolType = _symbolType || symbolType;\n // 判断是否是svg\n const valid = isSvg(symbolType);\n if (valid === true) {\n const parser = new XMLParser();\n const { svg } = parser.parse(symbolType);\n if (!svg) {\n return null;\n }\n const path = isArray(svg.path) ? svg.path : [svg.path];\n _tempBounds.clear();\n const cacheList: { path: CustomPath2D; attribute: Record<string, any> }[] = [];\n path.forEach((item: any) => {\n const cache = new CustomPath2D().fromString(item.d);\n const attribute: any = {};\n SVG_PARSE_ATTRIBUTE_MAP_KEYS.forEach(k => {\n if (item[k]) {\n attribute[SVG_PARSE_ATTRIBUTE_MAP[k]] = item[k];\n }\n });\n // 查找\n cacheList.push({\n path: cache,\n attribute\n });\n _tempBounds.union(cache.bounds);\n });\n const width = _tempBounds.width();\n const height = _tempBounds.height();\n // 规范化到1\n const maxWH = max(width, height);\n const scale = 1 / maxWH;\n cacheList.forEach(cache => cache.path.transform(0, 0, scale, scale));\n\n this._parsedPath = new CustomSymbolClass(symbolType, cacheList, true);\n Symbol.userSymbolMap[symbolType] = this._parsedPath;\n return this._parsedPath;\n }\n\n const cache = new CustomPath2D().fromString(symbolType);\n const width = cache.bounds.width();\n const height = cache.bounds.height();\n // 规范化到1\n const maxWH = max(width, height);\n const scale = 1 / maxWH;\n cache.transform(0, 0, scale, scale);\n this._parsedPath = new CustomSymbolClass(symbolType, cache);\n Symbol.userSymbolMap[symbolType] = this._parsedPath;\n return this._parsedPath;\n }\n\n protected doUpdateAABBBounds(full?: boolean): AABBBounds {\n const symbolTheme = getTheme(this).symbol;\n this._AABBBounds.setValue(Infinity, Infinity, -Infinity, -Infinity);\n const attribute = this.attribute;\n const bounds = application.graphicService.updateSymbolAABBBounds(\n attribute,\n getTheme(this).symbol,\n this._AABBBounds,\n full,\n this\n );\n\n const { boundsPadding = symbolTheme.boundsPadding } = attribute;\n const paddingArray = parsePadding(boundsPadding);\n if (paddingArray) {\n (bounds as AABBBounds).expand(paddingArray);\n }\n\n this.clearUpdateBoundTag();\n return bounds as AABBBounds;\n }\n\n protected tryUpdateOBBBounds(): OBBBounds {\n throw new Error('暂不支持');\n }\n\n getDefaultAttribute(name: string) {\n const symbolTheme = getTheme(this).symbol;\n return symbolTheme[name];\n }\n\n protected needUpdateTags(keys: string[]): boolean {\n return super.needUpdateTags(keys, SYMBOL_UPDATE_TAG_KEY);\n }\n protected needUpdateTag(key: string): boolean {\n return super.needUpdateTag(key, SYMBOL_UPDATE_TAG_KEY);\n }\n\n toCustomPath() {\n const symbolInstance = this.getParsedPath();\n const size = this.attribute.size;\n const x = 0;\n const y = 0;\n const formattedSize = isArray(size) ? size : [size, size];\n\n return symbolInstance.path\n ? new CustomPath2D().fromCustomPath2D(symbolInstance.path, x, y, formattedSize[0], formattedSize[1])\n : new CustomPath2D().fromString(symbolInstance.pathStr, x, y, formattedSize[0], formattedSize[1]);\n }\n\n clone() {\n return new Symbol({ ...this.attribute });\n }\n\n getNoWorkAnimateAttr(): Record<string, number> {\n return Symbol.NOWORK_ANIMATE_ATTR;\n }\n}\n\n// addAttributeToPrototype(DefaultSymbolStyle, Symbol, PURE_STYLE_KEY);\n"]}
@@ -1,18 +1,18 @@
1
- import type { IGraphicAttribute, IFullThemeSpec, IGraphic, IGroup, ITheme, IThemeSpec } from '../interface';
1
+ import type { IFullThemeSpec, IGraphic, IGroup, ITheme, IThemeSpec } from '../interface';
2
2
  export declare function newThemeObj(): IFullThemeSpec;
3
3
  export declare class Theme implements ITheme {
4
4
  combinedTheme: IFullThemeSpec;
5
5
  userTheme?: IThemeSpec;
6
- commonTheme?: Partial<IGraphicAttribute>;
7
6
  protected _defaultTheme: IFullThemeSpec;
8
7
  dirty: boolean;
9
8
  constructor();
9
+ initTheme(): void;
10
10
  getTheme(group?: IGroup): IFullThemeSpec;
11
11
  getParentWithTheme(group: IGroup): IGroup;
12
12
  applyTheme(group: IGroup, pt: IThemeSpec, force?: boolean): IThemeSpec;
13
- protected doCombine(parentTheme: IThemeSpec): void;
14
- resetTheme(t: IThemeSpec, g: IGroup): void;
13
+ protected doCombine(parentCombinedTheme?: IThemeSpec): void;
15
14
  setTheme(t: IThemeSpec, g: IGroup): void;
15
+ resetTheme(t: IThemeSpec, g: IGroup): void;
16
16
  dirtyChildren(g: IGroup): void;
17
17
  }
18
18
  export declare const globalTheme: Theme;
@@ -42,27 +42,24 @@ function newThemeObj() {
42
42
  };
43
43
  }
44
44
 
45
- function combineTheme(out, t, rewrite = !0) {
46
- t && (rewrite ? Object.keys(t).forEach((k => {
47
- out[k] ? Object.assign(out[k], t[k]) : out[k] = t[k];
48
- })) : Object.keys(t).forEach((k => {
49
- if (out[k]) {
50
- const outItem = out[k], tItem = t[k];
51
- Object.keys(t[k]).forEach((kItem => {
52
- void 0 === outItem[kItem] && (outItem[kItem] = tItem[kItem]);
53
- }));
54
- } else out[k] = t[k];
55
- })));
45
+ function combine(out, t) {
46
+ Object.keys(t).forEach((k => {
47
+ out[k] = t[k];
48
+ }));
56
49
  }
57
50
 
58
51
  exports.newThemeObj = newThemeObj;
59
52
 
60
- const staticThemePools = new Array(60).fill(0).map((() => newThemeObj()));
53
+ const globalThemeObj = newThemeObj();
61
54
 
62
55
  class Theme {
63
56
  constructor() {
64
- this._defaultTheme = staticThemePools.pop() || newThemeObj(), this.combinedTheme = this._defaultTheme,
65
- this.dirty = !1;
57
+ this.initTheme(), this.dirty = !1;
58
+ }
59
+ initTheme() {
60
+ this._defaultTheme = {}, themeKeys.forEach((key => {
61
+ this._defaultTheme[key] = Object.create(globalThemeObj[key]);
62
+ })), this.combinedTheme = this._defaultTheme;
66
63
  }
67
64
  getTheme(group) {
68
65
  if (!group) return this.combinedTheme;
@@ -81,30 +78,32 @@ class Theme {
81
78
  const parentGroup = this.getParentWithTheme(group);
82
79
  if (parentGroup) {
83
80
  const parentTheme = parentGroup.theme;
84
- (parentTheme.dirty || force) && parentTheme.applyTheme(parentGroup, pt, !0), this.userTheme ? combineTheme(this.userTheme, parentTheme.userTheme, !1) : this.userTheme = (0,
85
- vutils_1.clone)(parentTheme.userTheme), combineTheme(pt, parentTheme.userTheme);
81
+ (parentTheme.dirty || force) && parentTheme.applyTheme(parentGroup, pt, !0);
86
82
  }
87
- this.userTheme ? this.doCombine(pt) : (parentGroup ? this.combinedTheme = parentGroup.theme.combinedTheme : (this.combinedTheme = this._defaultTheme,
83
+ this.userTheme ? this.doCombine(parentGroup && parentGroup.theme.combinedTheme) : (parentGroup ? this.combinedTheme = parentGroup.theme.combinedTheme : (this.combinedTheme = this._defaultTheme,
88
84
  vutils_1.Logger.getInstance().warn("未知错误,走到不应该走的区域里")), this.dirty = !1);
89
85
  }
90
86
  return this.combinedTheme;
91
87
  }
92
- doCombine(parentTheme) {
93
- const userTheme = this.userTheme, defaultTheme = this._defaultTheme, combinedTheme = this.combinedTheme, parentCommonTheme = parentTheme.common || {}, commonTheme = Object.assign(parentCommonTheme, this.commonTheme);
88
+ doCombine(parentCombinedTheme) {
89
+ const userTheme = this.userTheme, combinedTheme = this.combinedTheme;
94
90
  themeKeys.forEach((k => {
95
- var _a, _b;
96
- userTheme[k] || commonTheme || parentTheme[k] ? combinedTheme[k] = Object.assign({}, defaultTheme[k], null != commonTheme ? commonTheme : {}, null !== (_a = parentTheme[k]) && void 0 !== _a ? _a : {}, null !== (_b = userTheme[k]) && void 0 !== _b ? _b : {}) : combinedTheme[k] = defaultTheme[k];
91
+ const obj = Object.create(globalThemeObj[k]);
92
+ parentCombinedTheme && parentCombinedTheme[k] && combine(obj, parentCombinedTheme[k]),
93
+ combinedTheme[k] && combine(obj, combinedTheme[k]), userTheme[k] && combine(obj, userTheme[k]),
94
+ this.combinedTheme[k] = obj;
95
+ })), userTheme.common && themeKeys.forEach((k => {
96
+ combine(this.combinedTheme[k], userTheme.common);
97
97
  })), this.dirty = !1;
98
98
  }
99
- resetTheme(t, g) {
100
- this.userTheme = t, this.dirty = !0, this.dirtyChildren(g);
101
- }
102
99
  setTheme(t, g) {
103
100
  let userTheme = this.userTheme;
104
101
  userTheme ? Object.keys(t).forEach((k => {
105
102
  userTheme[k] ? Object.assign(userTheme[k], t[k]) : userTheme[k] = Object.assign({}, t[k]);
106
- })) : userTheme = t, t.common && (this.commonTheme ? Object.assign(this.commonTheme, t.common) : this.commonTheme = t.common),
107
- this.userTheme = userTheme, this.dirty = !0, this.dirtyChildren(g);
103
+ })) : userTheme = t, this.userTheme = userTheme, this.dirty = !0, this.dirtyChildren(g);
104
+ }
105
+ resetTheme(t, g) {
106
+ this.userTheme = t, this.dirty = !0, this.dirtyChildren(g);
108
107
  }
109
108
  dirtyChildren(g) {
110
109
  g.forEachChildren((item => {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/graphic/theme.ts"],"names":[],"mappings":"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","file":"theme.js","sourcesContent":["import { Logger, clone } from '@visactor/vutils';\nimport type { IGraphicAttribute, IFullThemeSpec, IGraphic, IGroup, ITheme, IThemeSpec } from '../interface';\nimport {\n DefaultArcAttribute,\n DefaultAreaAttribute,\n DefaultCircleAttribute,\n DefaultGlyphAttribute,\n DefaultGroupAttribute,\n DefaultImageAttribute,\n DefaultLineAttribute,\n DefaultPathAttribute,\n DefaultPolygonAttribute,\n DefaultRect3dAttribute,\n DefaultRectAttribute,\n DefaultSymbolAttribute,\n DefaultTextAttribute,\n DefaultRichTextAttribute,\n DefaultRichTextIconAttribute\n} from './config';\n\nconst defaultThemeObj = {\n arc: DefaultArcAttribute,\n area: DefaultAreaAttribute,\n circle: DefaultCircleAttribute,\n line: DefaultLineAttribute,\n path: DefaultPathAttribute,\n symbol: DefaultSymbolAttribute,\n text: DefaultTextAttribute,\n rect: DefaultRectAttribute,\n rect3d: DefaultRect3dAttribute,\n polygon: DefaultPolygonAttribute,\n richtext: DefaultRichTextAttribute,\n richtextIcon: DefaultRichTextIconAttribute,\n image: DefaultImageAttribute,\n group: DefaultGroupAttribute,\n glyph: DefaultGlyphAttribute\n};\n\nconst themeKeys = Object.keys(defaultThemeObj);\n\nexport function newThemeObj(): IFullThemeSpec {\n return {\n arc: Object.assign({}, defaultThemeObj.arc),\n area: Object.assign({}, defaultThemeObj.area),\n circle: Object.assign({}, defaultThemeObj.circle),\n line: Object.assign({}, defaultThemeObj.line),\n path: Object.assign({}, defaultThemeObj.path),\n symbol: Object.assign({}, defaultThemeObj.symbol),\n text: Object.assign({}, defaultThemeObj.text),\n rect: Object.assign({}, defaultThemeObj.rect),\n rect3d: Object.assign({}, defaultThemeObj.rect3d),\n polygon: Object.assign({}, defaultThemeObj.polygon),\n richtext: Object.assign({}, defaultThemeObj.richtext),\n richtextIcon: Object.assign({}, defaultThemeObj.richtextIcon),\n image: Object.assign({}, defaultThemeObj.image),\n group: Object.assign({}, defaultThemeObj.group),\n glyph: Object.assign({}, defaultThemeObj.glyph)\n };\n}\n\n// 将t合并到out中\nfunction combineTheme(out: IThemeSpec, t: IThemeSpec, rewrite: boolean = true) {\n if (!t) {\n return;\n }\n if (rewrite) {\n Object.keys(t).forEach(k => {\n if (out[k]) {\n Object.assign(out[k], t[k]);\n } else {\n out[k] = t[k];\n }\n });\n } else {\n Object.keys(t).forEach(k => {\n if (out[k]) {\n // Object.assign(out[k], t[k]);\n const outItem = out[k];\n const tItem = t[k];\n Object.keys(t[k]).forEach(kItem => {\n if (outItem[kItem] === undefined) {\n outItem[kItem] = tItem[kItem];\n }\n });\n } else {\n out[k] = t[k];\n }\n });\n }\n}\n\n// 全局创建60个theme,节省打点耗时时间\nconst staticThemePools = new Array(60).fill(0).map(() => newThemeObj());\n\n// // 性能优化,没有修改的theme都使用这个\n// const defaultCommontTheme = newThemeObj();\n\n// function combineTheme(out: IThemeSpec, userTheme: IThemeSpec, defaultTheme: IFullThemeSpec) {\n\n// }\n\n// 优先级:\n// 1. userTheme\n// 2. commonTheme\n// 3. parentTheme\n// 4. defaultTheme\n\nexport class Theme implements ITheme {\n // 当前的总theme,最终合并后的theme\n combinedTheme: IFullThemeSpec;\n\n // 记录累计应用的所有用户设置上的theme\n userTheme?: IThemeSpec;\n // 公共属性,有些属性所有图元都生效,那就放在common位置\n commonTheme?: Partial<IGraphicAttribute>;\n\n // // 记录下一次设置的theme,同时也作为一个dirty位,记录是否存在没有合并的theme\n // nextTheme?: IThemeSpec;\n\n protected _defaultTheme: IFullThemeSpec;\n\n dirty: boolean;\n\n constructor() {\n // group数量不多,问题不大\n this._defaultTheme = staticThemePools.pop() || newThemeObj();\n this.combinedTheme = this._defaultTheme;\n this.dirty = false;\n }\n\n getTheme(group?: IGroup) {\n if (!group) {\n return this.combinedTheme;\n }\n if (!this.dirty) {\n return this.combinedTheme;\n }\n let parentTheme = {};\n const parentGroup = this.getParentWithTheme(group);\n if (parentGroup) {\n parentTheme = parentGroup.theme;\n }\n this.applyTheme(group, parentTheme);\n return this.combinedTheme;\n }\n\n // 获取具有主题的parent\n getParentWithTheme(group: IGroup) {\n while (group.parent) {\n group = group.parent;\n if (group.theme) {\n return group;\n }\n }\n return null;\n }\n\n // 应用主题,从根节点一直触发到当前节点(如果上层节点需要的话)\n applyTheme(group: IGroup, pt: IThemeSpec, force: boolean = false): IThemeSpec {\n if (this.dirty) {\n const parentGroup = this.getParentWithTheme(group);\n if (parentGroup) {\n const parentTheme = parentGroup.theme;\n if (parentTheme.dirty || force) {\n // 强制apply所有的上层\n parentTheme.applyTheme(parentGroup, pt, true);\n }\n // 将parentTheme.userTheme设置给自己的userTheme\n if (!this.userTheme) {\n this.userTheme = clone(parentTheme.userTheme);\n } else {\n combineTheme(this.userTheme, parentTheme.userTheme, false);\n }\n combineTheme(pt, parentTheme.userTheme);\n }\n // 如果当前节点没有userTheme的话,直接复用上层\n if (!this.userTheme) {\n if (parentGroup) {\n this.combinedTheme = parentGroup.theme.combinedTheme;\n } else {\n this.combinedTheme = this._defaultTheme;\n Logger.getInstance().warn('未知错误,走到不应该走的区域里');\n }\n this.dirty = false;\n } else {\n this.doCombine(pt);\n }\n }\n\n return this.combinedTheme;\n }\n\n // 合并userTheme到combinedTheme\n protected doCombine(parentTheme: IThemeSpec) {\n const userTheme = this.userTheme;\n const defaultTheme = this._defaultTheme;\n const combinedTheme = this.combinedTheme;\n const parentCommonTheme = parentTheme.common || {};\n const commonTheme = Object.assign(parentCommonTheme, this.commonTheme);\n // combineTheme({}, this.userTheme, this._defaultTheme);\n themeKeys.forEach(k => {\n if (userTheme[k] || commonTheme || parentTheme[k]) {\n combinedTheme[k] = Object.assign(\n {},\n defaultTheme[k],\n commonTheme ?? {},\n parentTheme[k] ?? {},\n userTheme[k] ?? {}\n );\n } else {\n combinedTheme[k] = defaultTheme[k];\n }\n });\n this.dirty = false;\n }\n\n resetTheme(t: IThemeSpec, g: IGroup) {\n this.userTheme = t;\n // 设置自己和子节点的theme都为dirty\n this.dirty = true;\n this.dirtyChildren(g);\n }\n\n setTheme(t: IThemeSpec, g: IGroup) {\n // 设置自己的nextTheme\n let userTheme = this.userTheme;\n if (userTheme) {\n Object.keys(t).forEach(k => {\n if (userTheme[k]) {\n Object.assign(userTheme[k], t[k]);\n } else {\n // todo,这里调用次数不多,应该问题不大\n userTheme[k] = Object.assign({}, t[k]);\n }\n });\n } else {\n userTheme = t;\n }\n if (t.common) {\n if (!this.commonTheme) {\n this.commonTheme = t.common;\n } else {\n Object.assign(this.commonTheme, t.common);\n }\n }\n this.userTheme = userTheme;\n // 设置自己和子节点的theme都为dirty\n this.dirty = true;\n this.dirtyChildren(g);\n }\n\n dirtyChildren(g: IGroup) {\n g.forEachChildren(item => {\n if ((item as IGroup).isContainer) {\n if ((item as IGroup).theme) {\n (item as IGroup).theme.dirty = true;\n }\n this.dirtyChildren(item as IGroup);\n }\n });\n }\n\n // // 设置theme到子元素,直接设置到currentTheme中去\n // setThemeToChildrenCurrentTheme(t :IThemeSpec, g: IGroup) {\n // g.forEachChildren((item) => {\n // if ((item as IGroup).isContainer) {\n // const currentTheme = (item as IGroup).theme.currentTheme;\n // Object.keys(t).forEach(k => {\n // Object.assign(currentTheme[k], t[k]);\n // });\n // this.setThemeToChildrenCurrentTheme(t, item as IGroup);\n // }\n // })\n // }\n}\n\nexport const globalTheme = new Theme();\n\nexport function getTheme(graphic: IGraphic, theme?: IFullThemeSpec): IFullThemeSpec {\n if (graphic.glyphHost) {\n return getTheme(graphic.glyphHost);\n }\n if (theme) {\n if (graphic.isContainer) {\n // 暂时不支持Group\n return theme;\n }\n return theme;\n }\n\n return getThemeFromGroup(graphic) || globalTheme.getTheme();\n}\n\nexport function getThemeFromGroup(graphic: IGraphic): IFullThemeSpec | null {\n let g: IGroup;\n if (graphic.isContainer) {\n // 找到存在theme的group\n g = graphic as IGroup;\n } else {\n g = graphic.parent;\n }\n\n if (g) {\n while (g) {\n if (g.theme) {\n break;\n }\n g = g.parent;\n }\n if (!g) {\n return globalTheme.getTheme();\n }\n if (!g.theme) {\n g.createTheme();\n }\n return g.theme.getTheme(g as IGroup);\n }\n return null;\n}\n"]}
1
+ {"version":3,"sources":["../src/graphic/theme.ts"],"names":[],"mappings":"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","file":"theme.js","sourcesContent":["import { Logger, clone } from '@visactor/vutils';\nimport type { IGraphicAttribute, IFullThemeSpec, IGraphic, IGroup, ITheme, IThemeSpec } from '../interface';\nimport {\n DefaultArcAttribute,\n DefaultAreaAttribute,\n DefaultCircleAttribute,\n DefaultGlyphAttribute,\n DefaultGroupAttribute,\n DefaultImageAttribute,\n DefaultLineAttribute,\n DefaultPathAttribute,\n DefaultPolygonAttribute,\n DefaultRect3dAttribute,\n DefaultRectAttribute,\n DefaultSymbolAttribute,\n DefaultTextAttribute,\n DefaultRichTextAttribute,\n DefaultRichTextIconAttribute\n} from './config';\n\nconst defaultThemeObj = {\n arc: DefaultArcAttribute,\n area: DefaultAreaAttribute,\n circle: DefaultCircleAttribute,\n line: DefaultLineAttribute,\n path: DefaultPathAttribute,\n symbol: DefaultSymbolAttribute,\n text: DefaultTextAttribute,\n rect: DefaultRectAttribute,\n rect3d: DefaultRect3dAttribute,\n polygon: DefaultPolygonAttribute,\n richtext: DefaultRichTextAttribute,\n richtextIcon: DefaultRichTextIconAttribute,\n image: DefaultImageAttribute,\n group: DefaultGroupAttribute,\n glyph: DefaultGlyphAttribute\n};\n\nconst themeKeys = Object.keys(defaultThemeObj);\n\nexport function newThemeObj(): IFullThemeSpec {\n return {\n arc: Object.assign({}, defaultThemeObj.arc),\n area: Object.assign({}, defaultThemeObj.area),\n circle: Object.assign({}, defaultThemeObj.circle),\n line: Object.assign({}, defaultThemeObj.line),\n path: Object.assign({}, defaultThemeObj.path),\n symbol: Object.assign({}, defaultThemeObj.symbol),\n text: Object.assign({}, defaultThemeObj.text),\n rect: Object.assign({}, defaultThemeObj.rect),\n rect3d: Object.assign({}, defaultThemeObj.rect3d),\n polygon: Object.assign({}, defaultThemeObj.polygon),\n richtext: Object.assign({}, defaultThemeObj.richtext),\n richtextIcon: Object.assign({}, defaultThemeObj.richtextIcon),\n image: Object.assign({}, defaultThemeObj.image),\n group: Object.assign({}, defaultThemeObj.group),\n glyph: Object.assign({}, defaultThemeObj.glyph)\n };\n}\n\n// /**\n// * 将t合并到out中\n// * @param out\n// * @param t\n// * @param rewrite 是否重写out的属性\n// * @returns\n// */\n// function combineTheme(out: IThemeSpec, t: IThemeSpec, rewrite: boolean = true) {\n// if (!t) {\n// return;\n// }\n// if (rewrite) {\n// Object.keys(t).forEach(k => {\n// if (out[k]) {\n// Object.assign(out[k], t[k]);\n// } else {\n// out[k] = t[k];\n// }\n// });\n// } else {\n// Object.keys(t).forEach(k => {\n// if (out[k]) {\n// // Object.assign(out[k], t[k]);\n// const outItem = out[k];\n// const tItem = t[k];\n// Object.keys(t[k]).forEach(kItem => {\n// if (outItem[kItem] === undefined) {\n// outItem[kItem] = tItem[kItem];\n// }\n// });\n// } else {\n// out[k] = t[k];\n// }\n// });\n// }\n// }\n\nfunction combine(out: Record<string, any>, t: Record<string, any>) {\n Object.keys(t).forEach(k => {\n out[k] = t[k];\n });\n}\n\nconst globalThemeObj = newThemeObj();\n\n// // 性能优化,没有修改的theme都使用这个\n// const defaultCommontTheme = newThemeObj();\n\n// function combineTheme(out: IThemeSpec, userTheme: IThemeSpec, defaultTheme: IFullThemeSpec) {\n\n// }\n\n// 优先级:\n// 1. userTheme\n// 2. commonTheme\n// 3. parentTheme\n// 4. defaultTheme\n\n// 使用原型链来保存主题,避免大量的merge操作\nexport class Theme implements ITheme {\n // 当前的总theme,最终合并后的theme\n combinedTheme: IFullThemeSpec;\n // 记录累计应用的所有用户设置上的theme\n userTheme?: IThemeSpec;\n\n protected _defaultTheme: IFullThemeSpec;\n\n dirty: boolean;\n\n constructor() {\n this.initTheme();\n this.dirty = false;\n }\n\n initTheme() {\n this._defaultTheme = {} as any;\n themeKeys.forEach(key => {\n this._defaultTheme[key] = Object.create(globalThemeObj[key]);\n });\n this.combinedTheme = this._defaultTheme;\n }\n\n /**\n * 获取group上应该有的主题配置\n * @param group\n * @returns\n */\n getTheme(group?: IGroup) {\n if (!group) {\n return this.combinedTheme;\n }\n if (!this.dirty) {\n return this.combinedTheme;\n }\n let parentTheme = {};\n const parentGroup = this.getParentWithTheme(group);\n if (parentGroup) {\n parentTheme = parentGroup.theme;\n }\n this.applyTheme(group, parentTheme);\n return this.combinedTheme;\n }\n\n // 获取具有主题的parent\n getParentWithTheme(group: IGroup) {\n while (group.parent) {\n group = group.parent;\n if (group.theme) {\n return group;\n }\n }\n return null;\n }\n\n // 应用主题,从根节点一直触发到当前节点(如果上层节点需要的话)\n applyTheme(group: IGroup, pt: IThemeSpec, force: boolean = false): IThemeSpec {\n if (this.dirty) {\n const parentGroup = this.getParentWithTheme(group);\n if (parentGroup) {\n const parentTheme = parentGroup.theme;\n if (parentTheme.dirty || force) {\n // 强制apply所有的上层\n parentTheme.applyTheme(parentGroup, pt, true);\n }\n }\n // 如果当前节点没有userTheme的话,直接复用上层的combinedTheme\n // 或者直接用默认的theme\n if (!this.userTheme) {\n if (parentGroup) {\n this.combinedTheme = parentGroup.theme.combinedTheme;\n } else {\n this.combinedTheme = this._defaultTheme;\n Logger.getInstance().warn('未知错误,走到不应该走的区域里');\n }\n this.dirty = false;\n } else {\n this.doCombine(parentGroup && parentGroup.theme.combinedTheme);\n }\n }\n\n return this.combinedTheme;\n }\n\n // 合并userTheme到combinedTheme\n protected doCombine(parentCombinedTheme?: IThemeSpec) {\n const userTheme = this.userTheme;\n const combinedTheme = this.combinedTheme;\n\n // 1. userTheme\n // 2. combinedTheme\n // 3. parentCombinedTheme\n // 4. defaultTheme\n themeKeys.forEach(k => {\n // init defaultTheme\n const obj = Object.create(globalThemeObj[k]);\n // merge parentCombinedTheme\n if (parentCombinedTheme && parentCombinedTheme[k]) {\n combine(obj, parentCombinedTheme[k]);\n }\n // merge combinedTheme\n if (combinedTheme[k]) {\n combine(obj, combinedTheme[k]);\n }\n // merge userTheme\n if (userTheme[k]) {\n combine(obj, userTheme[k]);\n }\n this.combinedTheme[k] = obj;\n });\n if (userTheme.common) {\n themeKeys.forEach(k => {\n combine(this.combinedTheme[k], userTheme.common);\n });\n }\n this.dirty = false;\n }\n\n setTheme(t: IThemeSpec, g: IGroup) {\n // 设置自己的nextTheme\n let userTheme = this.userTheme;\n if (userTheme) {\n Object.keys(t).forEach(k => {\n if (userTheme[k]) {\n Object.assign(userTheme[k], t[k]);\n } else {\n // todo,这里调用次数不多,应该问题不大\n userTheme[k] = Object.assign({}, t[k]);\n }\n });\n } else {\n userTheme = t;\n }\n this.userTheme = userTheme;\n // 设置自己和子节点的theme都为dirty\n this.dirty = true;\n this.dirtyChildren(g);\n }\n\n resetTheme(t: IThemeSpec, g: IGroup) {\n this.userTheme = t;\n // 设置自己和子节点的theme都为dirty\n this.dirty = true;\n this.dirtyChildren(g);\n }\n\n dirtyChildren(g: IGroup) {\n g.forEachChildren(item => {\n if ((item as IGroup).isContainer) {\n if ((item as IGroup).theme) {\n (item as IGroup).theme.dirty = true;\n }\n this.dirtyChildren(item as IGroup);\n }\n });\n }\n}\n\nexport const globalTheme = new Theme();\n\nexport function getTheme(graphic: IGraphic, theme?: IFullThemeSpec): IFullThemeSpec {\n if (graphic.glyphHost) {\n return getTheme(graphic.glyphHost);\n }\n if (theme) {\n if (graphic.isContainer) {\n // 暂时不支持Group\n return theme;\n }\n return theme;\n }\n\n return getThemeFromGroup(graphic) || globalTheme.getTheme();\n}\n\nexport function getThemeFromGroup(graphic: IGraphic): IFullThemeSpec | null {\n let g: IGroup;\n if (graphic.isContainer) {\n // 找到存在theme的group\n g = graphic as IGroup;\n } else {\n g = graphic.parent;\n }\n\n if (g) {\n while (g) {\n if (g.theme) {\n break;\n }\n g = g.parent;\n }\n if (!g) {\n return globalTheme.getTheme();\n }\n if (!g.theme) {\n g.createTheme();\n }\n return g.theme.getTheme(g as IGroup);\n }\n return null;\n}\n"]}
package/cjs/index.d.ts CHANGED
@@ -38,6 +38,8 @@ export * from './common/enums';
38
38
  export * from './common/generator';
39
39
  export * from './plugins/constants';
40
40
  export * from './allocator/matrix-allocate';
41
+ export * from './allocator/canvas-allocate';
42
+ export * from './allocator/graphic-allocate';
41
43
  export * from './animate/default-ticker';
42
44
  export { wrapCanvas, wrapContext } from './canvas/util';
43
45
  export * from './common/xml';
package/cjs/index.js CHANGED
@@ -37,6 +37,7 @@ __exportStar(require("./common/render-command-list"), exports), __exportStar(req
37
37
  __exportStar(require("./common/morphing-utils"), exports), __exportStar(require("./common/split-path"), exports),
38
38
  __exportStar(require("./common/enums"), exports), __exportStar(require("./common/generator"), exports),
39
39
  __exportStar(require("./plugins/constants"), exports), __exportStar(require("./allocator/matrix-allocate"), exports),
40
+ __exportStar(require("./allocator/canvas-allocate"), exports), __exportStar(require("./allocator/graphic-allocate"), exports),
40
41
  __exportStar(require("./animate/default-ticker"), exports);
41
42
 
42
43
  var util_1 = require("./canvas/util");
package/cjs/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AACA,qBAAmB;AAEnB,8CAA4B;AAC5B,gDAA8B;AAC9B,4CAA0B;AAC1B,4CAA0B;AAC1B,2CAAyB;AACzB,0CAAwB;AACxB,8CAA4B;AAC5B,2CAAyB;AACzB,4EAA0D;AAC1D,2CAAyB;AACzB,yCAAuB;AACvB,2CAAyB;AACzB,4CAA0B;AAC1B,2DAAyC;AACzC,iDAA+B;AAG/B,gDAA8B;AAC9B,wDAAsC;AACtC,0DAAwC;AACxC,uDAAqC;AACrC,yDAAuC;AACvC,mDAAiC;AACjC,wDAAsC;AACtC,iEAA+C;AAC/C,qDAAmC;AACnC,iDAA+B;AAC/B,qDAAmC;AACnC,sDAAoC;AACpC,kDAAgC;AAEhC,oDAAkC;AAClC,wDAAsC;AACtC,uDAAqC;AACrC,+DAA6C;AAC7C,gDAA8B;AAC9B,0DAAwC;AACxC,sDAAoC;AACpC,iDAA+B;AAC/B,qDAAmC;AACnC,sDAAoC;AACpC,8DAA4C;AAE5C,2DAAyC;AACzC,sCAAwD;AAA/C,kGAAA,UAAU,OAAA;AAAE,mGAAA,WAAW,OAAA;AAChC,+CAA6B;AAC7B,0DAAwC;AACxC,8CAA4B;AAC5B,gDAA8B;AAC9B,8CAA4B","file":"index.js","sourcesContent":["// import 'core-js/proposals/reflect-metadata';\nimport './modules';\n\nexport * from './container';\nexport * from './core/global';\nexport * from './graphic';\nexport * from './modules';\nexport * from './create';\nexport * from './event';\nexport * from './interface';\nexport * from './render';\nexport * from './render/contributions/render/base-render';\nexport * from './canvas';\nexport * from './core';\nexport * from './picker';\nexport * from './animate';\nexport * from './resource-loader/loader';\nexport * from './color-string';\n\n/* export common */\nexport * from './common/text';\nexport * from './common/bezier-utils';\nexport * from './common/bounds-context';\nexport * from './common/seg-context';\nexport * from './common/custom-path2d';\nexport * from './common/segment';\nexport * from './common/canvas-utils';\nexport * from './common/contribution-provider';\nexport * from './common/generator';\nexport * from './common/utils';\nexport * from './common/shape/arc';\nexport * from './common/shape/rect';\nexport * from './common/matrix';\n\nexport * from './common/path-svg';\nexport * from './common/render-curve';\nexport * from './common/render-area';\nexport * from './common/render-command-list';\nexport * from './common/sort';\nexport * from './common/morphing-utils';\nexport * from './common/split-path';\nexport * from './common/enums';\nexport * from './common/generator';\nexport * from './plugins/constants';\nexport * from './allocator/matrix-allocate';\n\nexport * from './animate/default-ticker';\nexport { wrapCanvas, wrapContext } from './canvas/util';\nexport * from './common/xml';\nexport * from './common/inversify-lite';\nexport * from './constants';\nexport * from './application';\nexport * from './env-check';\n"]}
1
+ {"version":3,"sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AACA,qBAAmB;AAEnB,8CAA4B;AAC5B,gDAA8B;AAC9B,4CAA0B;AAC1B,4CAA0B;AAC1B,2CAAyB;AACzB,0CAAwB;AACxB,8CAA4B;AAC5B,2CAAyB;AACzB,4EAA0D;AAC1D,2CAAyB;AACzB,yCAAuB;AACvB,2CAAyB;AACzB,4CAA0B;AAC1B,2DAAyC;AACzC,iDAA+B;AAG/B,gDAA8B;AAC9B,wDAAsC;AACtC,0DAAwC;AACxC,uDAAqC;AACrC,yDAAuC;AACvC,mDAAiC;AACjC,wDAAsC;AACtC,iEAA+C;AAC/C,qDAAmC;AACnC,iDAA+B;AAC/B,qDAAmC;AACnC,sDAAoC;AACpC,kDAAgC;AAEhC,oDAAkC;AAClC,wDAAsC;AACtC,uDAAqC;AACrC,+DAA6C;AAC7C,gDAA8B;AAC9B,0DAAwC;AACxC,sDAAoC;AACpC,iDAA+B;AAC/B,qDAAmC;AACnC,sDAAoC;AACpC,8DAA4C;AAC5C,8DAA4C;AAC5C,+DAA6C;AAE7C,2DAAyC;AACzC,sCAAwD;AAA/C,kGAAA,UAAU,OAAA;AAAE,mGAAA,WAAW,OAAA;AAChC,+CAA6B;AAC7B,0DAAwC;AACxC,8CAA4B;AAC5B,gDAA8B;AAC9B,8CAA4B","file":"index.js","sourcesContent":["// import 'core-js/proposals/reflect-metadata';\nimport './modules';\n\nexport * from './container';\nexport * from './core/global';\nexport * from './graphic';\nexport * from './modules';\nexport * from './create';\nexport * from './event';\nexport * from './interface';\nexport * from './render';\nexport * from './render/contributions/render/base-render';\nexport * from './canvas';\nexport * from './core';\nexport * from './picker';\nexport * from './animate';\nexport * from './resource-loader/loader';\nexport * from './color-string';\n\n/* export common */\nexport * from './common/text';\nexport * from './common/bezier-utils';\nexport * from './common/bounds-context';\nexport * from './common/seg-context';\nexport * from './common/custom-path2d';\nexport * from './common/segment';\nexport * from './common/canvas-utils';\nexport * from './common/contribution-provider';\nexport * from './common/generator';\nexport * from './common/utils';\nexport * from './common/shape/arc';\nexport * from './common/shape/rect';\nexport * from './common/matrix';\n\nexport * from './common/path-svg';\nexport * from './common/render-curve';\nexport * from './common/render-area';\nexport * from './common/render-command-list';\nexport * from './common/sort';\nexport * from './common/morphing-utils';\nexport * from './common/split-path';\nexport * from './common/enums';\nexport * from './common/generator';\nexport * from './plugins/constants';\nexport * from './allocator/matrix-allocate';\nexport * from './allocator/canvas-allocate';\nexport * from './allocator/graphic-allocate';\n\nexport * from './animate/default-ticker';\nexport { wrapCanvas, wrapContext } from './canvas/util';\nexport * from './common/xml';\nexport * from './common/inversify-lite';\nexport * from './constants';\nexport * from './application';\nexport * from './env-check';\n"]}
@@ -10,6 +10,7 @@ import type { ISymbol } from './graphic/symbol';
10
10
  import type { IText } from './graphic/text';
11
11
  export interface IAllocate<T> {
12
12
  allocate: (...d: any) => T;
13
+ getCommon?: () => T;
13
14
  allocateByObj: (obj: T) => T;
14
15
  free: (d: T) => void;
15
16
  length: number;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/interface/allocator.ts"],"names":[],"mappings":"","file":"allocator.js","sourcesContent":["import type { IMatrix, mat4 } from '@visactor/vutils';\nimport type { ICanvas } from './canvas';\nimport type { IRect } from './graphic/rect';\nimport type { IArc } from './graphic/arc';\nimport type { IArea } from './graphic/area';\nimport type { ICircle } from './graphic/circle';\nimport type { ILine } from './graphic/line';\nimport type { IPath } from './graphic/path';\nimport type { ISymbol } from './graphic/symbol';\nimport type { IText } from './graphic/text';\n\nexport interface IAllocate<T> {\n allocate: (...d: any) => T;\n allocateByObj: (obj: T) => T;\n free: (d: T) => void;\n length: number;\n}\n\nexport type ICanvasAllocate = IAllocate<ICanvas>;\nexport type IRectAllocate = IAllocate<IRect>;\nexport type IArcAllocate = IAllocate<IArc>;\nexport type IAreaAllocate = IAllocate<IArea>;\nexport type ICircleAllocate = IAllocate<ICircle>;\nexport type ILineAllocate = IAllocate<ILine>;\nexport type IPathAllocate = IAllocate<IPath>;\nexport type ISymbolAllocate = IAllocate<ISymbol>;\nexport type ITextAllocate = IAllocate<IText>;\n\nexport type IMatrixAllocate = IAllocate<IMatrix>;\nexport type IMat4Allocate = IAllocate<mat4>;\n"]}
1
+ {"version":3,"sources":["../src/interface/allocator.ts"],"names":[],"mappings":"","file":"allocator.js","sourcesContent":["import type { IMatrix, mat4 } from '@visactor/vutils';\nimport type { ICanvas } from './canvas';\nimport type { IRect } from './graphic/rect';\nimport type { IArc } from './graphic/arc';\nimport type { IArea } from './graphic/area';\nimport type { ICircle } from './graphic/circle';\nimport type { ILine } from './graphic/line';\nimport type { IPath } from './graphic/path';\nimport type { ISymbol } from './graphic/symbol';\nimport type { IText } from './graphic/text';\n\nexport interface IAllocate<T> {\n allocate: (...d: any) => T;\n getCommon?: () => T;\n allocateByObj: (obj: T) => T;\n free: (d: T) => void;\n length: number;\n}\n\nexport type ICanvasAllocate = IAllocate<ICanvas>;\nexport type IRectAllocate = IAllocate<IRect>;\nexport type IArcAllocate = IAllocate<IArc>;\nexport type IAreaAllocate = IAllocate<IArea>;\nexport type ICircleAllocate = IAllocate<ICircle>;\nexport type ILineAllocate = IAllocate<ILine>;\nexport type IPathAllocate = IAllocate<IPath>;\nexport type ISymbolAllocate = IAllocate<ISymbol>;\nexport type ITextAllocate = IAllocate<IText>;\n\nexport type IMatrixAllocate = IAllocate<IMatrix>;\nexport type IMat4Allocate = IAllocate<mat4>;\n"]}
@@ -102,6 +102,7 @@ export interface IGlobal extends Omit<IEventElement, 'on' | 'off' | 'once' | 'em
102
102
  };
103
103
  envParams?: any;
104
104
  supportEvent: boolean;
105
+ optimizeVisible: boolean;
105
106
  setEnv: (env: EnvType, params?: IEnvParamsMap[EnvType]) => void;
106
107
  setActiveEnvContribution: (contribution: IEnvContribution) => void;
107
108
  createCanvas: (params: ICreateCanvasParams) => HTMLCanvasElement | any;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/interface/global.ts"],"names":[],"mappings":"","file":"global.js","sourcesContent":["import type { Dict, IAABBBoundsLike, IPointLike } from '@visactor/vutils';\nimport type { ICanvasLike } from './canvas';\nimport type { IEventElement } from './common';\nimport type { IContribution } from './contribution';\nimport type { ISyncHook } from './sync-hook';\n\nexport interface ILoader {\n loadImage: (url: string) => HTMLImageElement | ImageData;\n loadJson: (url: string) => JSON;\n}\n\n// 环境定义\nexport type EnvType = 'browser' | 'feishu' | 'tt' | 'taro' | 'node' | 'native' | 'lynx' | 'wx';\n\n// 创建canvas需要的参数\nexport interface ICreateCanvasParams {\n id?: string;\n // 像素宽\n width?: number;\n // 像素高\n height?: number;\n dpr?: number;\n}\n\nexport interface ILoader {\n loadImage: (url: string) => HTMLImageElement | ImageData;\n loadJson: (url: string) => JSON;\n}\n\nexport interface IEnvContribution\n extends IContribution<IGlobal>,\n Omit<IEventElement, 'on' | 'off' | 'once' | 'emit' | 'removeAllListeners'> {\n // 当前代码所运行的环境\n type: EnvType;\n\n // 是否支持事件\n // node环境不需要事件\n supportEvent: boolean;\n\n // 开始配置环境,相当于init\n configure: (global: IGlobal, ...p: any) => void;\n\n // 创建销毁\n createCanvas: (params: ICreateCanvasParams) => ICanvasLike | any;\n createOffscreenCanvas: (params: ICreateCanvasParams) => ICanvasLike | any;\n releaseCanvas: (canvas: ICanvasLike | string | any) => void;\n\n getNativeAABBBounds: (dom: string | HTMLElement | any) => IAABBBoundsLike;\n removeDom: (dom: HTMLElement) => boolean;\n createDom: (params: CreateDOMParamsType) => HTMLElement | null;\n getElementTop: (dom: any, baseWindow?: boolean) => number;\n getElementLeft: (dom: any, baseWindow?: boolean) => number;\n getElementTopLeft: (dom: any, baseWindow?: boolean) => { top: number; left: number };\n\n /**\n * 获取动态canvas的数量,offscreenCanvas或者framebuffer\n */\n getDynamicCanvasCount: () => number;\n\n /**\n * 获取静态canvas的数量,纯粹canvas\n */\n getStaticCanvasCount: () => number;\n\n // 设备信息\n getDevicePixelRatio: () => number;\n\n // 通用接口\n getRequestAnimationFrame: () => (callback: FrameRequestCallback) => number;\n getCancelAnimationFrame: () => (h: number) => void;\n\n // DOM接口\n getElementById?: (str: string) => HTMLElement | null;\n getRootElement?: () => HTMLElement | null;\n /**\n * get document instance\n */\n getDocument?: () => Document | null;\n /**\n * whether supports TouchEvent.\n */\n supportsTouchEvents: boolean;\n /**\n * whether supports PointerEvent.\n */\n supportsPointerEvents: boolean;\n /**\n * whether supports MouseEvent.\n */\n supportsMouseEvents: boolean;\n /**\n * Whether to allow setting the cursor style\n */\n applyStyles?: boolean;\n\n /**\n * 将窗口坐标转换为画布坐标,小程序/小组件环境需要兼容\n */\n mapToCanvasPoint?: (event: any, domElement?: any) => IPointLike | null;\n\n loadImage: (url: string) => Promise<{\n loadState: 'success' | 'fail';\n data: HTMLImageElement | ImageData | null;\n }>;\n loadSvg: (url: string) => Promise<{\n loadState: 'success' | 'fail';\n data: HTMLImageElement | ImageData | null;\n }>;\n loadJson: (url: string) => Promise<{\n loadState: 'success' | 'fail';\n data: Record<string, unknown> | null;\n }>;\n loadArrayBuffer: (url: string) => Promise<{\n loadState: 'success' | 'fail';\n data: ArrayBuffer | null;\n }>;\n loadBlob: (url: string) => Promise<{\n loadState: 'success' | 'fail';\n data: Blob | null;\n }>;\n}\n\nexport type IMiniAppEnvParams = {\n /** dom 容器对象 */\n domref?: Dict<any>;\n /**\n * 强行设置env,如果env重复设置也设置\n */\n force?: boolean;\n /**\n * 可用的canvas列表\n */\n canvasIdLists?: (string | number)[];\n /**\n * 表示可以自由使用的canvas索引\n */\n freeCanvasIdx?: string | number;\n /** taro 环境使用 */\n taro?: any;\n pixelRatio?: number;\n [key: string]: any;\n};\n\nexport interface IEnvParamsMap {\n readonly taro: IMiniAppEnvParams;\n readonly feishu: IMiniAppEnvParams;\n readonly tt: IMiniAppEnvParams;\n readonly browser: any;\n readonly node: any;\n readonly native: any;\n readonly lynx: any;\n readonly wx: any;\n}\n\nexport type CreateDOMParamsType = {\n tagName?: string;\n width?: number;\n height?: number;\n style?: string | Record<string, any>;\n parent?: string | HTMLElement;\n};\nexport interface IGlobal extends Omit<IEventElement, 'on' | 'off' | 'once' | 'emit' | 'removeAllListeners'> {\n // 当前代码所运行的环境\n env: EnvType;\n\n // 设备的dpr\n devicePixelRatio: number;\n\n // 当设置env的时候被调用\n hooks: {\n onSetEnv: ISyncHook<[EnvType | undefined, EnvType, IGlobal]>;\n };\n\n // 设置env的时候传入的参数\n // node环境需要传入整个node-canvas包\n // 小程序环境需要传入小程序要用到的参数\n envParams?: any;\n\n // 是否支持事件\n // node环境不需要事件\n supportEvent: boolean;\n\n setEnv: (env: EnvType, params?: IEnvParamsMap[EnvType]) => void;\n setActiveEnvContribution: (contribution: IEnvContribution) => void;\n createCanvas: (params: ICreateCanvasParams) => HTMLCanvasElement | any;\n createOffscreenCanvas: (params: ICreateCanvasParams) => HTMLCanvasElement | any;\n releaseCanvas: (canvas: HTMLCanvasElement | string | any) => void;\n\n /**\n * 获取环境中最大动态canvas的数量,offscreenCanvas或者framebuffer\n */\n getDynamicCanvasCount: () => number;\n\n isChrome: () => boolean;\n isSafari: () => boolean;\n\n /**\n * 获取环境中最大静态canvas的数量,纯粹canvas\n */\n getStaticCanvasCount: () => number;\n\n /* 浏览器环境 - dom tree */\n getElementById: (str: string) => HTMLElement | null;\n getRootElement: () => HTMLElement | null;\n /**\n * get document instance\n */\n getDocument: () => Document | null;\n /**\n * whether supports TouchEvent.\n */\n supportsTouchEvents: boolean;\n /**\n * whether supports PointerEvent.\n */\n supportsPointerEvents: boolean;\n /**\n * whether supports MouseEvent.\n */\n supportsMouseEvents: boolean;\n /**\n * Whether to allow setting the cursor style\n */\n applyStyles?: boolean;\n /**\n * 测量文字的方法\n */\n measureTextMethod: 'native' | 'simple' | 'quick';\n\n getRequestAnimationFrame: () => null | ((callback: FrameRequestCallback) => number);\n getCancelAnimationFrame: () => null | ((h: number) => void);\n\n /**\n * 将窗口坐标转换为画布坐标,小程序/小组件环境需要兼容\n */\n mapToCanvasPoint: (nativeEvent: any, domElement?: any) => IPointLike | null;\n\n loadImage: (url: string) => Promise<{\n loadState: 'success' | 'fail';\n data: HTMLImageElement | ImageData | null;\n }>;\n loadSvg: (url: string) => Promise<{\n loadState: 'success' | 'fail';\n data: HTMLImageElement | ImageData | null;\n }>;\n loadJson: (url: string) => Promise<{\n loadState: 'success' | 'fail';\n data: Record<string, unknown> | null;\n }>;\n loadArrayBuffer: (url: string) => Promise<{\n loadState: 'success' | 'fail';\n data: ArrayBuffer | null;\n }>;\n loadBlob: (url: string) => Promise<{\n loadState: 'success' | 'fail';\n data: Blob | null;\n }>;\n\n removeDom: (dom: HTMLElement) => boolean;\n createDom: (params: CreateDOMParamsType) => HTMLElement | null;\n\n getElementTop: (dom: any, baseWindow?: boolean) => number;\n getElementLeft: (dom: any, baseWindow?: boolean) => number;\n getElementTopLeft: (dom: any, baseWindow?: boolean) => { top: number; left: number };\n}\n"]}
1
+ {"version":3,"sources":["../src/interface/global.ts"],"names":[],"mappings":"","file":"global.js","sourcesContent":["import type { Dict, IAABBBoundsLike, IPointLike } from '@visactor/vutils';\nimport type { ICanvasLike } from './canvas';\nimport type { IEventElement } from './common';\nimport type { IContribution } from './contribution';\nimport type { ISyncHook } from './sync-hook';\n\nexport interface ILoader {\n loadImage: (url: string) => HTMLImageElement | ImageData;\n loadJson: (url: string) => JSON;\n}\n\n// 环境定义\nexport type EnvType = 'browser' | 'feishu' | 'tt' | 'taro' | 'node' | 'native' | 'lynx' | 'wx';\n\n// 创建canvas需要的参数\nexport interface ICreateCanvasParams {\n id?: string;\n // 像素宽\n width?: number;\n // 像素高\n height?: number;\n dpr?: number;\n}\n\nexport interface ILoader {\n loadImage: (url: string) => HTMLImageElement | ImageData;\n loadJson: (url: string) => JSON;\n}\n\nexport interface IEnvContribution\n extends IContribution<IGlobal>,\n Omit<IEventElement, 'on' | 'off' | 'once' | 'emit' | 'removeAllListeners'> {\n // 当前代码所运行的环境\n type: EnvType;\n\n // 是否支持事件\n // node环境不需要事件\n supportEvent: boolean;\n\n // 开始配置环境,相当于init\n configure: (global: IGlobal, ...p: any) => void;\n\n // 创建销毁\n createCanvas: (params: ICreateCanvasParams) => ICanvasLike | any;\n createOffscreenCanvas: (params: ICreateCanvasParams) => ICanvasLike | any;\n releaseCanvas: (canvas: ICanvasLike | string | any) => void;\n\n getNativeAABBBounds: (dom: string | HTMLElement | any) => IAABBBoundsLike;\n removeDom: (dom: HTMLElement) => boolean;\n createDom: (params: CreateDOMParamsType) => HTMLElement | null;\n getElementTop: (dom: any, baseWindow?: boolean) => number;\n getElementLeft: (dom: any, baseWindow?: boolean) => number;\n getElementTopLeft: (dom: any, baseWindow?: boolean) => { top: number; left: number };\n\n /**\n * 获取动态canvas的数量,offscreenCanvas或者framebuffer\n */\n getDynamicCanvasCount: () => number;\n\n /**\n * 获取静态canvas的数量,纯粹canvas\n */\n getStaticCanvasCount: () => number;\n\n // 设备信息\n getDevicePixelRatio: () => number;\n\n // 通用接口\n getRequestAnimationFrame: () => (callback: FrameRequestCallback) => number;\n getCancelAnimationFrame: () => (h: number) => void;\n\n // DOM接口\n getElementById?: (str: string) => HTMLElement | null;\n getRootElement?: () => HTMLElement | null;\n /**\n * get document instance\n */\n getDocument?: () => Document | null;\n /**\n * whether supports TouchEvent.\n */\n supportsTouchEvents: boolean;\n /**\n * whether supports PointerEvent.\n */\n supportsPointerEvents: boolean;\n /**\n * whether supports MouseEvent.\n */\n supportsMouseEvents: boolean;\n /**\n * Whether to allow setting the cursor style\n */\n applyStyles?: boolean;\n\n /**\n * 将窗口坐标转换为画布坐标,小程序/小组件环境需要兼容\n */\n mapToCanvasPoint?: (event: any, domElement?: any) => IPointLike | null;\n\n loadImage: (url: string) => Promise<{\n loadState: 'success' | 'fail';\n data: HTMLImageElement | ImageData | null;\n }>;\n loadSvg: (url: string) => Promise<{\n loadState: 'success' | 'fail';\n data: HTMLImageElement | ImageData | null;\n }>;\n loadJson: (url: string) => Promise<{\n loadState: 'success' | 'fail';\n data: Record<string, unknown> | null;\n }>;\n loadArrayBuffer: (url: string) => Promise<{\n loadState: 'success' | 'fail';\n data: ArrayBuffer | null;\n }>;\n loadBlob: (url: string) => Promise<{\n loadState: 'success' | 'fail';\n data: Blob | null;\n }>;\n}\n\nexport type IMiniAppEnvParams = {\n /** dom 容器对象 */\n domref?: Dict<any>;\n /**\n * 强行设置env,如果env重复设置也设置\n */\n force?: boolean;\n /**\n * 可用的canvas列表\n */\n canvasIdLists?: (string | number)[];\n /**\n * 表示可以自由使用的canvas索引\n */\n freeCanvasIdx?: string | number;\n /** taro 环境使用 */\n taro?: any;\n pixelRatio?: number;\n [key: string]: any;\n};\n\nexport interface IEnvParamsMap {\n readonly taro: IMiniAppEnvParams;\n readonly feishu: IMiniAppEnvParams;\n readonly tt: IMiniAppEnvParams;\n readonly browser: any;\n readonly node: any;\n readonly native: any;\n readonly lynx: any;\n readonly wx: any;\n}\n\nexport type CreateDOMParamsType = {\n tagName?: string;\n width?: number;\n height?: number;\n style?: string | Record<string, any>;\n parent?: string | HTMLElement;\n};\nexport interface IGlobal extends Omit<IEventElement, 'on' | 'off' | 'once' | 'emit' | 'removeAllListeners'> {\n // 当前代码所运行的环境\n env: EnvType;\n\n // 设备的dpr\n devicePixelRatio: number;\n\n // 当设置env的时候被调用\n hooks: {\n onSetEnv: ISyncHook<[EnvType | undefined, EnvType, IGlobal]>;\n };\n\n // 设置env的时候传入的参数\n // node环境需要传入整个node-canvas包\n // 小程序环境需要传入小程序要用到的参数\n envParams?: any;\n\n // 是否支持事件\n // node环境不需要事件\n supportEvent: boolean;\n\n // 是否在不显示canvas的时候停止绘图操作,默认false\n optimizeVisible: boolean;\n\n setEnv: (env: EnvType, params?: IEnvParamsMap[EnvType]) => void;\n setActiveEnvContribution: (contribution: IEnvContribution) => void;\n createCanvas: (params: ICreateCanvasParams) => HTMLCanvasElement | any;\n createOffscreenCanvas: (params: ICreateCanvasParams) => HTMLCanvasElement | any;\n releaseCanvas: (canvas: HTMLCanvasElement | string | any) => void;\n\n /**\n * 获取环境中最大动态canvas的数量,offscreenCanvas或者framebuffer\n */\n getDynamicCanvasCount: () => number;\n\n isChrome: () => boolean;\n isSafari: () => boolean;\n\n /**\n * 获取环境中最大静态canvas的数量,纯粹canvas\n */\n getStaticCanvasCount: () => number;\n\n /* 浏览器环境 - dom tree */\n getElementById: (str: string) => HTMLElement | null;\n getRootElement: () => HTMLElement | null;\n /**\n * get document instance\n */\n getDocument: () => Document | null;\n /**\n * whether supports TouchEvent.\n */\n supportsTouchEvents: boolean;\n /**\n * whether supports PointerEvent.\n */\n supportsPointerEvents: boolean;\n /**\n * whether supports MouseEvent.\n */\n supportsMouseEvents: boolean;\n /**\n * Whether to allow setting the cursor style\n */\n applyStyles?: boolean;\n /**\n * 测量文字的方法\n */\n measureTextMethod: 'native' | 'simple' | 'quick';\n\n getRequestAnimationFrame: () => null | ((callback: FrameRequestCallback) => number);\n getCancelAnimationFrame: () => null | ((h: number) => void);\n\n /**\n * 将窗口坐标转换为画布坐标,小程序/小组件环境需要兼容\n */\n mapToCanvasPoint: (nativeEvent: any, domElement?: any) => IPointLike | null;\n\n loadImage: (url: string) => Promise<{\n loadState: 'success' | 'fail';\n data: HTMLImageElement | ImageData | null;\n }>;\n loadSvg: (url: string) => Promise<{\n loadState: 'success' | 'fail';\n data: HTMLImageElement | ImageData | null;\n }>;\n loadJson: (url: string) => Promise<{\n loadState: 'success' | 'fail';\n data: Record<string, unknown> | null;\n }>;\n loadArrayBuffer: (url: string) => Promise<{\n loadState: 'success' | 'fail';\n data: ArrayBuffer | null;\n }>;\n loadBlob: (url: string) => Promise<{\n loadState: 'success' | 'fail';\n data: Blob | null;\n }>;\n\n removeDom: (dom: HTMLElement) => boolean;\n createDom: (params: CreateDOMParamsType) => HTMLElement | null;\n\n getElementTop: (dom: any, baseWindow?: boolean) => number;\n getElementLeft: (dom: any, baseWindow?: boolean) => number;\n getElementTopLeft: (dom: any, baseWindow?: boolean) => { top: number; left: number };\n}\n"]}
@@ -3,6 +3,8 @@ import type { ICustomPath2D } from '../path';
3
3
  export type IRectAttribute = {
4
4
  width: number;
5
5
  height: number;
6
+ x1: number;
7
+ y1: number;
6
8
  cornerRadius: number | number[];
7
9
  };
8
10
  export type IRectGraphicAttribute = Partial<IGraphicAttribute> & Partial<IRectAttribute>;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/interface/graphic/rect.ts"],"names":[],"mappings":"","file":"rect.js","sourcesContent":["import type { IGraphicAttribute, IGraphic } from '../graphic';\nimport type { ICustomPath2D } from '../path';\n\nexport type IRectAttribute = {\n width: number;\n height: number;\n cornerRadius: number | number[];\n};\n\nexport type IRectGraphicAttribute = Partial<IGraphicAttribute> & Partial<IRectAttribute>;\n\nexport interface IRect extends IGraphic<IRectGraphicAttribute> {\n cache?: ICustomPath2D;\n}\n"]}
1
+ {"version":3,"sources":["../src/interface/graphic/rect.ts"],"names":[],"mappings":"","file":"rect.js","sourcesContent":["import type { IGraphicAttribute, IGraphic } from '../graphic';\nimport type { ICustomPath2D } from '../path';\n\nexport type IRectAttribute = {\n width: number;\n height: number;\n x1: number;\n y1: number;\n cornerRadius: number | number[];\n};\n\nexport type IRectGraphicAttribute = Partial<IGraphicAttribute> & Partial<IRectAttribute>;\n\nexport interface IRect extends IGraphic<IRectGraphicAttribute> {\n cache?: ICustomPath2D;\n}\n"]}
@@ -93,7 +93,7 @@ export type IBackgroundConfig = {
93
93
  expandX?: number;
94
94
  expandY?: number;
95
95
  };
96
- export type IGraphicStyle = IFillStyle & IStrokeStyle & IPickStyle & {
96
+ export type IGraphicStyle = IFillStyle & IStrokeStyle & {
97
97
  opacity: number;
98
98
  backgroundMode: 'repeat' | 'repeat-x' | 'repeat-y' | 'no-repeat';
99
99
  background: string | HTMLImageElement | HTMLCanvasElement | IBackgroundConfig | null;
@@ -113,9 +113,6 @@ export type IGraphicStyle = IFillStyle & IStrokeStyle & IPickStyle & {
113
113
  anchorType?: 'position' | 'boundsLeftTop';
114
114
  } | null;
115
115
  };
116
- export type IPickStyle = {
117
- pickStrokeBuffer: number;
118
- };
119
116
  export type IDebugType = {
120
117
  _debug_bounds: boolean | ((c: any, g: any) => void);
121
118
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/interface/graphic.ts"],"names":[],"mappings":"","file":"graphic.js","sourcesContent":["import type { IAABBBounds, IOBBBounds, IMatrix, IPointLike, IPoint } from '@visactor/vutils';\nimport type { IAnimate, IStep, EasingType, IAnimateTarget } from './animate';\nimport type { IColor } from './color';\nimport type { IGroup } from './graphic/group';\nimport type { IShadowRoot } from './graphic/shadow-root';\nimport type { ILayer } from './layer';\nimport type { INode } from './node-tree';\nimport type { ICustomPath2D } from './path';\nimport type { IStage } from './stage';\nimport type { IGlyphGraphicAttribute } from './graphic/glyph';\nimport type { IContainPointMode } from '../common/enums';\nimport type { IFace3d } from './graphic/face3d';\nimport type { IPickerService } from './picker';\n\ntype IStrokeSeg = {\n start: number; // 百分比\n // end和length二选一\n end: number; // 百分比\n length: number; // 像素长度\n};\n\n// TODO 最后加一个any\nexport type GraphicType =\n | 'area'\n | 'circle'\n | 'ellipse'\n | 'line'\n | 'rect'\n | 'rect3d'\n | 'path'\n | 'richtext'\n | 'text'\n | 'arc'\n | 'arc3d'\n | 'image'\n | 'symbol'\n | 'group'\n | 'shadowroot'\n | 'polygon'\n | 'pyramid3d'\n | 'glyph';\n\n// Cursor style\n// See: https://developer.mozilla.org/en-US/docs/Web/CSS/cursor\nexport type Cursor =\n | 'auto'\n | 'default'\n | 'none'\n | 'context-menu'\n | 'help'\n | 'pointer'\n | 'progress'\n | 'wait'\n | 'cell'\n | 'crosshair'\n | 'text'\n | 'vertical-text'\n | 'alias'\n | 'copy'\n | 'move'\n | 'no-drop'\n | 'not-allowed'\n | 'grab'\n | 'grabbing'\n | 'all-scroll'\n | 'col-resize'\n | 'row-resize'\n | 'n-resize'\n | 'e-resize'\n | 's-resize'\n | 'w-resize'\n | 'ne-resize'\n | 'nw-resize'\n | 'se-resize'\n | 'sw-resize'\n | 'ew-resize'\n | 'ns-resize'\n | 'nesw-resize'\n | 'nwse-resize'\n | 'zoom-in'\n | 'zoom-out';\n\nexport type ITransform = {\n x: number;\n y: number;\n z: number;\n dx: number;\n dy: number;\n dz: number;\n scrollX: number;\n scrollY: number;\n scaleX: number;\n scaleY: number;\n scaleZ: number;\n angle: number;\n alpha: number;\n beta: number;\n scaleCenter: [number | string, number | string];\n anchor: [number | string, number | string]; // 基于AABB的锚点位置,用于简单的定位某些path\n anchor3d: [number | string, number | string, number] | [number | string, number | string]; // 3d的锚点位置\n postMatrix: IMatrix;\n};\n\nexport type IFillType = boolean | string | IColor;\nexport type IFillStyle = {\n fillOpacity: number;\n shadowBlur: number;\n shadowColor: string;\n shadowOffsetX: number;\n shadowOffsetY: number;\n fill: IFillType;\n};\n\nexport type ILayout = {\n alignSelf: 'auto' | 'flex-start' | 'flex-end' | 'center' | 'baseline' | 'stretch';\n};\n\nexport type IBorderStyle = Omit<IStrokeStyle, 'outerBorder' | 'innerBorder'> & {\n distance: number | string;\n visible?: boolean;\n};\n\nexport type IStrokeType = boolean | string | IColor | null;\nexport type IStrokeStyle = {\n outerBorder: Partial<IBorderStyle>;\n innerBorder: Partial<IBorderStyle>;\n strokeOpacity: number;\n lineDash: number[];\n lineDashOffset: number;\n lineWidth: number;\n lineCap: CanvasLineCap;\n lineJoin: CanvasLineJoin;\n miterLimit: number;\n // 描边的boundsBuffer,用于控制bounds的buffer\n strokeBoundsBuffer: number;\n /**\n * stroke - true 全描边\n * stroke - false 不描边\n * stroke 为数值类型,适用于rect\\arc等图形,用于配置部分描边的场景,其中\n *\n * 0b00000 - 不描边\n * 0b000001 - top\n * 0b000010 - right\n * 0b000100 - bottom\n * 0b001000 - left\n * 相应的:\n * 0b000011 - top + right\n * 0b000111 - top + right + bottom\n * 0b001111 - 全描边\n *\n * stroke - boolean[],适用于rect\\arc等图形,用于配置部分描边的场景\n */\n stroke: IStrokeType[] | IStrokeType;\n};\n\ntype TextureType = 'circle' | 'diamond' | 'rect' | 'vertical-line' | 'horizontal-line' | 'bias-lr' | 'bias-rl' | 'grid';\n\nexport type IConnectedStyle = {\n // 连接,取零或者断开\n connectedType: 'connect' | 'zero' | 'none';\n connectedStyle: {\n stroke: IStrokeStyle['stroke'];\n strokeOpacity: IStrokeStyle['strokeOpacity'];\n lineDash: IStrokeStyle['lineDash'];\n lineDashOffset: IStrokeStyle['lineDashOffset'];\n lineCap: IStrokeStyle['lineCap'];\n lineJoin: IStrokeStyle['lineJoin'];\n lineWidth: IStrokeStyle['lineWidth'];\n fill: IFillStyle['fill'];\n fillOpacity: IFillStyle['fillOpacity'];\n };\n connectedX: number;\n connectedY: number;\n};\n\nexport type IBackgroundConfig = {\n stroke?: string | boolean;\n fill?: string | boolean;\n lineWidth?: number;\n cornerRadius?: number;\n expandX?: number;\n expandY?: number;\n};\n\nexport type IGraphicStyle = IFillStyle &\n IStrokeStyle &\n IPickStyle & {\n opacity: number;\n backgroundMode: 'repeat' | 'repeat-x' | 'repeat-y' | 'no-repeat'; // 填充模式(与具体图元有关)\n background: string | HTMLImageElement | HTMLCanvasElement | IBackgroundConfig | null; // 背景,可以与fill同时存在\n texture: TextureType | string; // 纹理\n textureColor: string; // 纹理颜色\n textureSize: number; // 纹理大小\n texturePadding: number; // 纹理间隙\n blur: number;\n cursor: Cursor | null; // 鼠标样式\n // HTML的dom或者string\n html: {\n dom: string | HTMLElement; // dom字符串或者dom\n container: string | HTMLElement | null; // id或者dom\n width: number; // 容器的宽度\n height: number; // 容器的高度\n style: string | Record<string, any>; // 容器的样式\n visible?: boolean;\n anchorType?: 'position' | 'boundsLeftTop';\n } | null;\n };\n\nexport type IPickStyle = {\n pickStrokeBuffer: number;\n};\n\nexport type IDebugType = {\n _debug_bounds: boolean | ((c: any, g: any) => void);\n};\nexport type IGraphicAttribute = IDebugType &\n IGraphicStyle &\n ITransform & {\n /**\n * stroke百分比\n */\n strokeSeg: IStrokeSeg | null;\n // 包围盒的padding\n boundsPadding: number | number[];\n /**\n * 选择模式,精确模式,粗糙模式(包围盒模式),自定义模式\n */\n pickMode: 'accurate' | 'imprecise' | 'custom';\n boundsMode: 'accurate' | 'imprecise';\n customPickShape: () => boolean | null;\n /**\n * 是否支持事件拾取,默认为 true。\n * @default true\n */\n pickable: boolean;\n /**\n * 对于 group 节点,是否支持其子元素的事件拾取,默认为 true。\n * 如果 group `pickable` 关闭,`childrenPickable` 开启,那么 group 的子节点仍参与事件拾取\n * @default true\n */\n childrenPickable: boolean;\n /**\n * 元素是否可见。\n * @default true\n */\n visible: boolean;\n zIndex: number;\n layout: any;\n /**\n * 是否在3d中控制方向\n * false: 不控制方向\n * true: 始终控制方向朝摄像机\n */\n keepDirIn3d?: boolean;\n shadowRootIdx: number;\n globalZIndex: number;\n globalCompositeOperation: CanvasRenderingContext2D['globalCompositeOperation'] | '';\n // 完全支持滚动 | 完全不支持滚动 | 支持x方向的滚动 | 支持y方向的滚动\n overflow: 'scroll' | 'hidden' | 'scroll-x' | 'scroll-y';\n };\n\nexport interface IGraphicJson<T extends Partial<IGraphicAttribute> = Partial<IGraphicAttribute>> {\n attribute: Partial<T>;\n _uid: number;\n type: string;\n name: string;\n children: IGraphicJson<T>[];\n}\n\n/** the context of setAttribute */\nexport type ISetAttributeContext = {\n /** type of setAttribute */\n type?: number;\n animationState?: {\n step?: IStep;\n isFirstFrameOfStep?: boolean;\n /** ratio of animation */\n ratio?: number;\n /** is animation end? */\n end?: boolean;\n };\n skipUpdateCallback?: boolean;\n};\n\nexport type IGraphicAnimateParams = {\n id?: number | string;\n onStart?: () => void;\n onFrame?: (step: IStep, ratio: number) => void;\n onEnd?: () => void;\n onRemove?: () => void;\n interpolate?: (key: string, ratio: number, from: any, to: any, nextAttributes: any) => boolean;\n};\n\nexport interface IGraphic<T extends Partial<IGraphicAttribute> = Partial<IGraphicAttribute>>\n extends INode,\n IAnimateTarget {\n type?: GraphicType;\n numberType?: number;\n stage?: IStage;\n layer?: ILayer;\n shadowRoot?: IShadowRoot;\n glyphHost?: IGraphic<IGlyphGraphicAttribute>;\n backgroundImg?: boolean;\n\n bindDom?: Map<string | HTMLElement, { container: HTMLElement | string; dom: HTMLElement; wrapGroup: HTMLDivElement }>;\n\n valid: boolean;\n parent: IGroup | null;\n isContainer?: boolean;\n // 是否是3d模式(是否应用3d视角)\n in3dMode?: boolean;\n\n // 上次更新的stamp\n stamp?: number;\n animationBackUps?: {\n from: Record<string, any>;\n to: Record<string, any>;\n };\n\n attribute: Partial<T>;\n\n /** 用于实现morph动画场景,转换成bezier曲线渲染 */\n pathProxy?: ICustomPath2D | ((attrs: T) => ICustomPath2D);\n incremental?: number;\n incrementalAt?: number;\n\n /** 记录state对应的图形属性 */\n states?: Record<string, Partial<T>>;\n normalAttrs?: Partial<T>;\n stateProxy?: (stateName: string, targetStates?: string[]) => Partial<T>;\n findFace?: () => IFace3d;\n toggleState: (stateName: string, hasAnimation?: boolean) => void;\n removeState: (stateName: string, hasAnimation?: boolean) => void;\n clearStates: (hasAnimation?: boolean) => void;\n useStates: (states: string[], hasAnimation?: boolean) => void;\n addState: (stateName: string, keepCurrentStates?: boolean, hasAnimation?: boolean) => void;\n hasState: (stateName?: string) => boolean;\n getState: (stateName: string) => Partial<T>;\n onBeforeAttributeUpdate?: (\n val: any,\n attributes: Partial<T>,\n key: null | string | string[],\n context?: ISetAttributeContext\n ) => T | undefined;\n applyStateAttrs: (attrs: Partial<T>, stateNames: string[], hasAnimation?: boolean, isClear?: boolean) => void;\n updateNormalAttrs: (stateAttrs: Partial<T>) => void;\n\n // get\n readonly AABBBounds: IAABBBounds; // 用于获取当前节点的AABB包围盒\n readonly OBBBounds: IOBBBounds; // 获取OBB包围盒,旋转防重叠需要用\n readonly globalAABBBounds: IAABBBounds; // 全局AABB包围盒\n readonly transMatrix: IMatrix; // 变换矩阵,动态计算\n readonly globalTransMatrix: IMatrix; // 变换矩阵,动态计算\n\n getOffsetXY: (attr?: ITransform) => IPoint;\n\n // function\n containsPoint: (x: number, y: number, mode?: IContainPointMode, picker?: IPickerService) => boolean;\n\n setMode: (mode: '3d' | '2d') => void;\n isValid: () => boolean;\n\n // TODO: transform API\n // 基于当前transform的变换,普通用户尽量别用,拿捏不住的~\n translate: (x: number, y: number) => this;\n translateTo: (x: number, y: number) => this;\n scale: (scaleX: number, scaleY: number, scaleCenter?: IPointLike) => this;\n scaleTo: (scaleX: number, scaleY: number) => this;\n rotate: (angle: number, rotateCenter?: IPointLike) => this;\n rotateTo: (angle: number) => this;\n skewTo: (b: number, c: number) => this;\n addUpdateBoundTag: () => void;\n addUpdateShapeAndBoundsTag: () => void;\n addUpdateLayoutTag: () => void;\n\n update: (d?: { bounds: boolean; trans: boolean }) => void;\n\n // animate\n animate: (params?: IGraphicAnimateParams) => IAnimate;\n\n // 语法糖,可有可无,有的为了首屏性能考虑做成get方法,有的由外界直接托管,内部不赋值\n name?: string;\n\n // 供render处理shape缓存tag\n shouldUpdateShape: () => boolean;\n clearUpdateShapeTag: () => void;\n\n // // 供render缓存shape\n // cacheShape?: ICustomPath2D;\n // // 线段使用的path2D\n // cacheLine?: ISegPath2D | ISegPath2D[];\n // // 面积图使用的path2D\n // cacheArea?: IAreaCacheItem | IAreaCacheItem[];\n\n setAttributes: (params: Partial<T>, forceUpdateTag?: boolean, context?: ISetAttributeContext) => void;\n\n initAttributes: (params: Partial<T>) => void;\n\n setAttribute: (key: string, value: any, forceUpdateTag?: boolean, context?: ISetAttributeContext) => void;\n\n setStage: (stage?: IStage, layer?: ILayer) => void;\n onSetStage: (cb: (g: IGraphic, stage: IStage) => void) => void;\n\n shouldUpdateAABBBounds: () => boolean;\n shouldSelfChangeUpdateAABBBounds: () => boolean;\n shouldUpdateGlobalMatrix: () => boolean;\n\n addUpdatePositionTag: () => void;\n addUpdateGlobalPositionTag: () => void;\n\n attachShadow: () => IShadowRoot;\n detachShadow: () => void;\n\n toJson: () => IGraphicJson;\n\n /** 创建pathProxy */\n createPathProxy: (path?: string) => void;\n /** 将图形转换成CustomPath2D */\n toCustomPath?: () => ICustomPath2D;\n\n resources?: Map<\n string | HTMLImageElement | HTMLCanvasElement | IBackgroundConfig,\n { state: 'init' | 'loading' | 'success' | 'fail'; data?: HTMLImageElement | HTMLCanvasElement }\n >;\n imageLoadSuccess: (url: string, data: HTMLImageElement) => void;\n imageLoadFail: (url: string) => void;\n\n clone: () => IGraphic;\n stopAnimates: (stopChildren?: boolean) => void;\n getNoWorkAnimateAttr: () => Record<string, number>;\n}\n\nexport interface IRoot extends IGraphic {\n pick: (x: number, y: number) => IGraphic;\n}\n\n/**\n * 动画配置\n */\nexport type IAnimateConfig = {\n duration?: number;\n easing?: EasingType;\n};\n\nexport type GraphicReleaseStatus = 'released' | 'willRelease';\n"]}
1
+ {"version":3,"sources":["../src/interface/graphic.ts"],"names":[],"mappings":"","file":"graphic.js","sourcesContent":["import type { IAABBBounds, IOBBBounds, IMatrix, IPointLike, IPoint } from '@visactor/vutils';\nimport type { IAnimate, IStep, EasingType, IAnimateTarget } from './animate';\nimport type { IColor } from './color';\nimport type { IGroup } from './graphic/group';\nimport type { IShadowRoot } from './graphic/shadow-root';\nimport type { ILayer } from './layer';\nimport type { INode } from './node-tree';\nimport type { ICustomPath2D } from './path';\nimport type { IStage } from './stage';\nimport type { IGlyphGraphicAttribute } from './graphic/glyph';\nimport type { IContainPointMode } from '../common/enums';\nimport type { IFace3d } from './graphic/face3d';\nimport type { IPickerService } from './picker';\n\ntype IStrokeSeg = {\n start: number; // 百分比\n // end和length二选一\n end: number; // 百分比\n length: number; // 像素长度\n};\n\n// TODO 最后加一个any\nexport type GraphicType =\n | 'area'\n | 'circle'\n | 'ellipse'\n | 'line'\n | 'rect'\n | 'rect3d'\n | 'path'\n | 'richtext'\n | 'text'\n | 'arc'\n | 'arc3d'\n | 'image'\n | 'symbol'\n | 'group'\n | 'shadowroot'\n | 'polygon'\n | 'pyramid3d'\n | 'glyph';\n\n// Cursor style\n// See: https://developer.mozilla.org/en-US/docs/Web/CSS/cursor\nexport type Cursor =\n | 'auto'\n | 'default'\n | 'none'\n | 'context-menu'\n | 'help'\n | 'pointer'\n | 'progress'\n | 'wait'\n | 'cell'\n | 'crosshair'\n | 'text'\n | 'vertical-text'\n | 'alias'\n | 'copy'\n | 'move'\n | 'no-drop'\n | 'not-allowed'\n | 'grab'\n | 'grabbing'\n | 'all-scroll'\n | 'col-resize'\n | 'row-resize'\n | 'n-resize'\n | 'e-resize'\n | 's-resize'\n | 'w-resize'\n | 'ne-resize'\n | 'nw-resize'\n | 'se-resize'\n | 'sw-resize'\n | 'ew-resize'\n | 'ns-resize'\n | 'nesw-resize'\n | 'nwse-resize'\n | 'zoom-in'\n | 'zoom-out';\n\nexport type ITransform = {\n x: number;\n y: number;\n z: number;\n dx: number;\n dy: number;\n dz: number;\n scrollX: number;\n scrollY: number;\n scaleX: number;\n scaleY: number;\n scaleZ: number;\n angle: number;\n alpha: number;\n beta: number;\n scaleCenter: [number | string, number | string];\n anchor: [number | string, number | string]; // 基于AABB的锚点位置,用于简单的定位某些path\n anchor3d: [number | string, number | string, number] | [number | string, number | string]; // 3d的锚点位置\n postMatrix: IMatrix;\n};\n\nexport type IFillType = boolean | string | IColor;\nexport type IFillStyle = {\n fillOpacity: number;\n shadowBlur: number;\n shadowColor: string;\n shadowOffsetX: number;\n shadowOffsetY: number;\n fill: IFillType;\n};\n\nexport type ILayout = {\n alignSelf: 'auto' | 'flex-start' | 'flex-end' | 'center' | 'baseline' | 'stretch';\n};\n\nexport type IBorderStyle = Omit<IStrokeStyle, 'outerBorder' | 'innerBorder'> & {\n distance: number | string;\n visible?: boolean;\n};\n\nexport type IStrokeType = boolean | string | IColor | null;\nexport type IStrokeStyle = {\n outerBorder: Partial<IBorderStyle>;\n innerBorder: Partial<IBorderStyle>;\n strokeOpacity: number;\n lineDash: number[];\n lineDashOffset: number;\n lineWidth: number;\n lineCap: CanvasLineCap;\n lineJoin: CanvasLineJoin;\n miterLimit: number;\n // 描边的boundsBuffer,用于控制bounds的buffer\n strokeBoundsBuffer: number;\n /**\n * stroke - true 全描边\n * stroke - false 不描边\n * stroke 为数值类型,适用于rect\\arc等图形,用于配置部分描边的场景,其中\n *\n * 0b00000 - 不描边\n * 0b000001 - top\n * 0b000010 - right\n * 0b000100 - bottom\n * 0b001000 - left\n * 相应的:\n * 0b000011 - top + right\n * 0b000111 - top + right + bottom\n * 0b001111 - 全描边\n *\n * stroke - boolean[],适用于rect\\arc等图形,用于配置部分描边的场景\n */\n stroke: IStrokeType[] | IStrokeType;\n};\n\ntype TextureType = 'circle' | 'diamond' | 'rect' | 'vertical-line' | 'horizontal-line' | 'bias-lr' | 'bias-rl' | 'grid';\n\nexport type IConnectedStyle = {\n // 连接,取零或者断开\n connectedType: 'connect' | 'zero' | 'none';\n connectedStyle: {\n stroke: IStrokeStyle['stroke'];\n strokeOpacity: IStrokeStyle['strokeOpacity'];\n lineDash: IStrokeStyle['lineDash'];\n lineDashOffset: IStrokeStyle['lineDashOffset'];\n lineCap: IStrokeStyle['lineCap'];\n lineJoin: IStrokeStyle['lineJoin'];\n lineWidth: IStrokeStyle['lineWidth'];\n fill: IFillStyle['fill'];\n fillOpacity: IFillStyle['fillOpacity'];\n };\n connectedX: number;\n connectedY: number;\n};\n\nexport type IBackgroundConfig = {\n stroke?: string | boolean;\n fill?: string | boolean;\n lineWidth?: number;\n cornerRadius?: number;\n expandX?: number;\n expandY?: number;\n};\n\nexport type IGraphicStyle = IFillStyle &\n IStrokeStyle & {\n opacity: number;\n backgroundMode: 'repeat' | 'repeat-x' | 'repeat-y' | 'no-repeat'; // 填充模式(与具体图元有关)\n background: string | HTMLImageElement | HTMLCanvasElement | IBackgroundConfig | null; // 背景,可以与fill同时存在\n texture: TextureType | string; // 纹理\n textureColor: string; // 纹理颜色\n textureSize: number; // 纹理大小\n texturePadding: number; // 纹理间隙\n blur: number;\n cursor: Cursor | null; // 鼠标样式\n // HTML的dom或者string\n html: {\n dom: string | HTMLElement; // dom字符串或者dom\n container: string | HTMLElement | null; // id或者dom\n width: number; // 容器的宽度\n height: number; // 容器的高度\n style: string | Record<string, any>; // 容器的样式\n visible?: boolean;\n anchorType?: 'position' | 'boundsLeftTop';\n } | null;\n };\n\nexport type IDebugType = {\n _debug_bounds: boolean | ((c: any, g: any) => void);\n};\nexport type IGraphicAttribute = IDebugType &\n IGraphicStyle &\n ITransform & {\n /**\n * stroke百分比\n */\n strokeSeg: IStrokeSeg | null;\n // 包围盒的padding\n boundsPadding: number | number[];\n /**\n * 选择模式,精确模式,粗糙模式(包围盒模式),自定义模式\n */\n pickMode: 'accurate' | 'imprecise' | 'custom';\n boundsMode: 'accurate' | 'imprecise';\n customPickShape: () => boolean | null;\n /**\n * 是否支持事件拾取,默认为 true。\n * @default true\n */\n pickable: boolean;\n /**\n * 对于 group 节点,是否支持其子元素的事件拾取,默认为 true。\n * 如果 group `pickable` 关闭,`childrenPickable` 开启,那么 group 的子节点仍参与事件拾取\n * @default true\n */\n childrenPickable: boolean;\n /**\n * 元素是否可见。\n * @default true\n */\n visible: boolean;\n zIndex: number;\n layout: any;\n /**\n * 是否在3d中控制方向\n * false: 不控制方向\n * true: 始终控制方向朝摄像机\n */\n keepDirIn3d?: boolean;\n shadowRootIdx: number;\n globalZIndex: number;\n globalCompositeOperation: CanvasRenderingContext2D['globalCompositeOperation'] | '';\n // 完全支持滚动 | 完全不支持滚动 | 支持x方向的滚动 | 支持y方向的滚动\n overflow: 'scroll' | 'hidden' | 'scroll-x' | 'scroll-y';\n };\n\nexport interface IGraphicJson<T extends Partial<IGraphicAttribute> = Partial<IGraphicAttribute>> {\n attribute: Partial<T>;\n _uid: number;\n type: string;\n name: string;\n children: IGraphicJson<T>[];\n}\n\n/** the context of setAttribute */\nexport type ISetAttributeContext = {\n /** type of setAttribute */\n type?: number;\n animationState?: {\n step?: IStep;\n isFirstFrameOfStep?: boolean;\n /** ratio of animation */\n ratio?: number;\n /** is animation end? */\n end?: boolean;\n };\n skipUpdateCallback?: boolean;\n};\n\nexport type IGraphicAnimateParams = {\n id?: number | string;\n onStart?: () => void;\n onFrame?: (step: IStep, ratio: number) => void;\n onEnd?: () => void;\n onRemove?: () => void;\n interpolate?: (key: string, ratio: number, from: any, to: any, nextAttributes: any) => boolean;\n};\n\nexport interface IGraphic<T extends Partial<IGraphicAttribute> = Partial<IGraphicAttribute>>\n extends INode,\n IAnimateTarget {\n type?: GraphicType;\n numberType?: number;\n stage?: IStage;\n layer?: ILayer;\n shadowRoot?: IShadowRoot;\n glyphHost?: IGraphic<IGlyphGraphicAttribute>;\n backgroundImg?: boolean;\n\n bindDom?: Map<string | HTMLElement, { container: HTMLElement | string; dom: HTMLElement; wrapGroup: HTMLDivElement }>;\n\n valid: boolean;\n parent: IGroup | null;\n isContainer?: boolean;\n // 是否是3d模式(是否应用3d视角)\n in3dMode?: boolean;\n\n // 上次更新的stamp\n stamp?: number;\n animationBackUps?: {\n from: Record<string, any>;\n to: Record<string, any>;\n };\n\n attribute: Partial<T>;\n\n /** 用于实现morph动画场景,转换成bezier曲线渲染 */\n pathProxy?: ICustomPath2D | ((attrs: T) => ICustomPath2D);\n incremental?: number;\n incrementalAt?: number;\n\n /** 记录state对应的图形属性 */\n states?: Record<string, Partial<T>>;\n normalAttrs?: Partial<T>;\n stateProxy?: (stateName: string, targetStates?: string[]) => Partial<T>;\n findFace?: () => IFace3d;\n toggleState: (stateName: string, hasAnimation?: boolean) => void;\n removeState: (stateName: string, hasAnimation?: boolean) => void;\n clearStates: (hasAnimation?: boolean) => void;\n useStates: (states: string[], hasAnimation?: boolean) => void;\n addState: (stateName: string, keepCurrentStates?: boolean, hasAnimation?: boolean) => void;\n hasState: (stateName?: string) => boolean;\n getState: (stateName: string) => Partial<T>;\n onBeforeAttributeUpdate?: (\n val: any,\n attributes: Partial<T>,\n key: null | string | string[],\n context?: ISetAttributeContext\n ) => T | undefined;\n applyStateAttrs: (attrs: Partial<T>, stateNames: string[], hasAnimation?: boolean, isClear?: boolean) => void;\n updateNormalAttrs: (stateAttrs: Partial<T>) => void;\n\n // get\n readonly AABBBounds: IAABBBounds; // 用于获取当前节点的AABB包围盒\n readonly OBBBounds: IOBBBounds; // 获取OBB包围盒,旋转防重叠需要用\n readonly globalAABBBounds: IAABBBounds; // 全局AABB包围盒\n readonly transMatrix: IMatrix; // 变换矩阵,动态计算\n readonly globalTransMatrix: IMatrix; // 变换矩阵,动态计算\n\n getOffsetXY: (attr?: ITransform) => IPoint;\n\n // function\n containsPoint: (x: number, y: number, mode?: IContainPointMode, picker?: IPickerService) => boolean;\n\n setMode: (mode: '3d' | '2d') => void;\n isValid: () => boolean;\n\n // TODO: transform API\n // 基于当前transform的变换,普通用户尽量别用,拿捏不住的~\n translate: (x: number, y: number) => this;\n translateTo: (x: number, y: number) => this;\n scale: (scaleX: number, scaleY: number, scaleCenter?: IPointLike) => this;\n scaleTo: (scaleX: number, scaleY: number) => this;\n rotate: (angle: number, rotateCenter?: IPointLike) => this;\n rotateTo: (angle: number) => this;\n skewTo: (b: number, c: number) => this;\n addUpdateBoundTag: () => void;\n addUpdateShapeAndBoundsTag: () => void;\n addUpdateLayoutTag: () => void;\n\n update: (d?: { bounds: boolean; trans: boolean }) => void;\n\n // animate\n animate: (params?: IGraphicAnimateParams) => IAnimate;\n\n // 语法糖,可有可无,有的为了首屏性能考虑做成get方法,有的由外界直接托管,内部不赋值\n name?: string;\n\n // 供render处理shape缓存tag\n shouldUpdateShape: () => boolean;\n clearUpdateShapeTag: () => void;\n\n // // 供render缓存shape\n // cacheShape?: ICustomPath2D;\n // // 线段使用的path2D\n // cacheLine?: ISegPath2D | ISegPath2D[];\n // // 面积图使用的path2D\n // cacheArea?: IAreaCacheItem | IAreaCacheItem[];\n\n setAttributes: (params: Partial<T>, forceUpdateTag?: boolean, context?: ISetAttributeContext) => void;\n\n initAttributes: (params: Partial<T>) => void;\n\n setAttribute: (key: string, value: any, forceUpdateTag?: boolean, context?: ISetAttributeContext) => void;\n\n setStage: (stage?: IStage, layer?: ILayer) => void;\n onSetStage: (cb: (g: IGraphic, stage: IStage) => void) => void;\n\n shouldUpdateAABBBounds: () => boolean;\n shouldSelfChangeUpdateAABBBounds: () => boolean;\n shouldUpdateGlobalMatrix: () => boolean;\n\n addUpdatePositionTag: () => void;\n addUpdateGlobalPositionTag: () => void;\n\n attachShadow: () => IShadowRoot;\n detachShadow: () => void;\n\n toJson: () => IGraphicJson;\n\n /** 创建pathProxy */\n createPathProxy: (path?: string) => void;\n /** 将图形转换成CustomPath2D */\n toCustomPath?: () => ICustomPath2D;\n\n resources?: Map<\n string | HTMLImageElement | HTMLCanvasElement | IBackgroundConfig,\n { state: 'init' | 'loading' | 'success' | 'fail'; data?: HTMLImageElement | HTMLCanvasElement }\n >;\n imageLoadSuccess: (url: string, data: HTMLImageElement) => void;\n imageLoadFail: (url: string) => void;\n\n clone: () => IGraphic;\n stopAnimates: (stopChildren?: boolean) => void;\n getNoWorkAnimateAttr: () => Record<string, number>;\n}\n\nexport interface IRoot extends IGraphic {\n pick: (x: number, y: number) => IGraphic;\n}\n\n/**\n * 动画配置\n */\nexport type IAnimateConfig = {\n duration?: number;\n easing?: EasingType;\n};\n\nexport type GraphicReleaseStatus = 'released' | 'willRelease';\n"]}
@@ -1,4 +1,4 @@
1
- import type { IAABBBounds, IBounds } from '@visactor/vutils';
1
+ import type { IAABBBounds, IBounds, IMatrixLike } from '@visactor/vutils';
2
2
  import type { IColor } from './color';
3
3
  import type { IContext2d } from './context';
4
4
  import type { IGraphic, IGraphicAttribute } from './graphic';
@@ -59,7 +59,7 @@ export interface IDrawContribution {
59
59
  draw: (renderService: IRenderService, drawParams: IDrawContext) => MaybePromise<void>;
60
60
  afterDraw?: (renderService: IRenderService, drawParams: IDrawContext) => MaybePromise<void>;
61
61
  getRenderContribution: (graphic: IGraphic) => IGraphicRender | null;
62
- renderGroup: (group: IGroup, drawContext: IDrawContext, skipSort?: boolean) => void;
62
+ renderGroup: (group: IGroup, drawContext: IDrawContext, matrix: IMatrixLike, skipSort?: boolean) => void;
63
63
  renderItem: (graphic: IGraphic, drawContext: IDrawContext, params?: IGraphicRenderDrawParams) => void;
64
64
  }
65
65
  export interface IGraphicRenderDrawParams {