@visactor/vrender-core 0.20.0-alpha.0 → 0.20.0-alpha.2

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 (504) hide show
  1. package/cjs/allocator/matrix-allocate.d.ts +1 -1
  2. package/cjs/allocator/matrix-allocate.js +2 -4
  3. package/cjs/allocator/matrix-allocate.js.map +1 -1
  4. package/cjs/animate/Ticker/default-ticker.d.ts +2 -53
  5. package/cjs/animate/Ticker/default-ticker.js +17 -130
  6. package/cjs/animate/Ticker/default-ticker.js.map +1 -1
  7. package/cjs/animate/Ticker/index.d.ts +4 -0
  8. package/cjs/animate/Ticker/index.js +3 -1
  9. package/cjs/animate/Ticker/index.js.map +1 -1
  10. package/cjs/animate/Ticker/manual-ticker-handler.d.ts +15 -0
  11. package/cjs/animate/Ticker/manual-ticker-handler.js +36 -0
  12. package/cjs/animate/Ticker/manual-ticker-handler.js.map +1 -0
  13. package/cjs/animate/Ticker/manual-ticker.d.ts +19 -0
  14. package/cjs/animate/Ticker/manual-ticker.js +37 -0
  15. package/cjs/animate/Ticker/manual-ticker.js.map +1 -0
  16. package/cjs/animate/Ticker/raf-tick-handler.d.ts +9 -0
  17. package/cjs/animate/Ticker/raf-tick-handler.js +30 -0
  18. package/cjs/animate/Ticker/raf-tick-handler.js.map +1 -0
  19. package/cjs/animate/Ticker/timeout-tick-handler.d.ts +9 -0
  20. package/cjs/animate/Ticker/timeout-tick-handler.js +28 -0
  21. package/cjs/animate/Ticker/timeout-tick-handler.js.map +1 -0
  22. package/cjs/animate/Ticker/type.d.ts +6 -0
  23. package/cjs/animate/Ticker/type.js +11 -0
  24. package/cjs/animate/Ticker/type.js.map +1 -0
  25. package/cjs/animate/animate.js +4 -2
  26. package/cjs/animate/animate.js.map +1 -1
  27. package/cjs/animate/custom-animate.d.ts +5 -16
  28. package/cjs/animate/custom-animate.js +9 -62
  29. package/cjs/animate/custom-animate.js.map +1 -1
  30. package/cjs/animate/group-fade.d.ts +16 -0
  31. package/cjs/animate/group-fade.js +66 -0
  32. package/cjs/animate/group-fade.js.map +1 -0
  33. package/cjs/animate/index.d.ts +1 -0
  34. package/cjs/animate/index.js +2 -1
  35. package/cjs/animate/index.js.map +1 -1
  36. package/cjs/canvas/conical-gradient.js.map +1 -1
  37. package/cjs/canvas/contributions/base-canvas.js +4 -13
  38. package/cjs/canvas/contributions/base-canvas.js.map +1 -1
  39. package/cjs/canvas/util.d.ts +0 -1
  40. package/cjs/canvas/util.js +7 -17
  41. package/cjs/canvas/util.js.map +1 -1
  42. package/cjs/common/3d-interceptor.d.ts +3 -0
  43. package/cjs/common/3d-interceptor.js +50 -0
  44. package/cjs/common/3d-interceptor.js.map +1 -0
  45. package/cjs/common/bezier-utils.js +2 -1
  46. package/cjs/common/canvas-utils.d.ts +1 -1
  47. package/cjs/common/canvas-utils.js +15 -30
  48. package/cjs/common/canvas-utils.js.map +1 -1
  49. package/cjs/common/matrix.d.ts +11 -3
  50. package/cjs/common/matrix.js +97 -19
  51. package/cjs/common/matrix.js.map +1 -1
  52. package/cjs/common/render-command-list.js +1 -2
  53. package/cjs/common/render-curve.js +22 -32
  54. package/cjs/common/render-curve.js.map +1 -1
  55. package/cjs/common/render-utils.js +2 -1
  56. package/cjs/common/segment/catmull-rom-close.d.ts +41 -0
  57. package/cjs/common/segment/catmull-rom-close.js +81 -0
  58. package/cjs/common/segment/catmull-rom-close.js.map +1 -0
  59. package/cjs/common/segment/catmull-rom.d.ts +38 -0
  60. package/cjs/common/segment/catmull-rom.js +97 -0
  61. package/cjs/common/segment/catmull-rom.js.map +1 -0
  62. package/cjs/common/segment/index.d.ts +5 -2
  63. package/cjs/common/segment/index.js +8 -1
  64. package/cjs/common/segment/index.js.map +1 -1
  65. package/cjs/common/sort.js +15 -12
  66. package/cjs/common/sort.js.map +1 -1
  67. package/cjs/common/text.d.ts +0 -2
  68. package/cjs/common/text.js +8 -14
  69. package/cjs/common/text.js.map +1 -1
  70. package/cjs/common/utils.js +1 -1
  71. package/cjs/common/utils.js.map +1 -1
  72. package/cjs/core/camera.js +3 -3
  73. package/cjs/core/camera.js.map +1 -1
  74. package/cjs/core/contributions/layerHandler/modules.js +2 -5
  75. package/cjs/core/contributions/layerHandler/modules.js.map +1 -1
  76. package/cjs/core/stage.d.ts +2 -2
  77. package/cjs/core/stage.js +23 -11
  78. package/cjs/core/stage.js.map +1 -1
  79. package/cjs/event/federated-event/base-event.js +12 -2
  80. package/cjs/event/federated-event/base-event.js.map +1 -1
  81. package/cjs/graphic/arc.d.ts +6 -4
  82. package/cjs/graphic/arc.js +46 -17
  83. package/cjs/graphic/arc.js.map +1 -1
  84. package/cjs/graphic/arc3d.d.ts +2 -2
  85. package/cjs/graphic/arc3d.js +8 -9
  86. package/cjs/graphic/arc3d.js.map +1 -1
  87. package/cjs/graphic/area.d.ts +5 -3
  88. package/cjs/graphic/area.js +27 -12
  89. package/cjs/graphic/area.js.map +1 -1
  90. package/cjs/graphic/builtin-symbol/index.d.ts +1 -1
  91. package/cjs/graphic/builtin-symbol/thin-triangle.d.ts +2 -2
  92. package/cjs/graphic/builtin-symbol/thin-triangle.js +2 -2
  93. package/cjs/graphic/builtin-symbol/thin-triangle.js.map +1 -1
  94. package/cjs/graphic/builtin-symbol/triangle-down.d.ts +1 -2
  95. package/cjs/graphic/builtin-symbol/triangle-down.js +4 -9
  96. package/cjs/graphic/builtin-symbol/triangle-down.js.map +1 -1
  97. package/cjs/graphic/builtin-symbol/triangle-left.d.ts +0 -1
  98. package/cjs/graphic/builtin-symbol/triangle-left.js +3 -8
  99. package/cjs/graphic/builtin-symbol/triangle-left.js.map +1 -1
  100. package/cjs/graphic/builtin-symbol/triangle-right.d.ts +1 -2
  101. package/cjs/graphic/builtin-symbol/triangle-right.js +4 -9
  102. package/cjs/graphic/builtin-symbol/triangle-right.js.map +1 -1
  103. package/cjs/graphic/builtin-symbol/triangle-up.d.ts +1 -2
  104. package/cjs/graphic/builtin-symbol/triangle-up.js +4 -9
  105. package/cjs/graphic/builtin-symbol/triangle-up.js.map +1 -1
  106. package/cjs/graphic/builtin-symbol/triangle.d.ts +1 -2
  107. package/cjs/graphic/builtin-symbol/triangle.js +1 -3
  108. package/cjs/graphic/builtin-symbol/triangle.js.map +1 -1
  109. package/cjs/graphic/builtin-symbol/utils.js +1 -5
  110. package/cjs/graphic/builtin-symbol/utils.js.map +1 -1
  111. package/cjs/graphic/circle.d.ts +5 -3
  112. package/cjs/graphic/circle.js +20 -12
  113. package/cjs/graphic/circle.js.map +1 -1
  114. package/cjs/graphic/config.js +7 -3
  115. package/cjs/graphic/config.js.map +1 -1
  116. package/cjs/graphic/glyph.d.ts +4 -2
  117. package/cjs/graphic/glyph.js +9 -2
  118. package/cjs/graphic/glyph.js.map +1 -1
  119. package/cjs/graphic/graphic-creator.js.map +1 -1
  120. package/cjs/graphic/graphic-service/common-outer-boder-bounds.d.ts +3 -0
  121. package/cjs/graphic/graphic-service/common-outer-boder-bounds.js +17 -0
  122. package/cjs/graphic/graphic-service/common-outer-boder-bounds.js.map +1 -0
  123. package/cjs/graphic/graphic-service/graphic-service.d.ts +7 -42
  124. package/cjs/graphic/graphic-service/graphic-service.js +21 -396
  125. package/cjs/graphic/graphic-service/graphic-service.js.map +1 -1
  126. package/cjs/graphic/graphic-service/symbol-outer-border-bounds.d.ts +3 -0
  127. package/cjs/graphic/graphic-service/symbol-outer-border-bounds.js +17 -0
  128. package/cjs/graphic/graphic-service/symbol-outer-border-bounds.js.map +1 -0
  129. package/cjs/graphic/graphic.d.ts +12 -9
  130. package/cjs/graphic/graphic.js +17 -2
  131. package/cjs/graphic/graphic.js.map +1 -1
  132. package/cjs/graphic/group.d.ts +7 -3
  133. package/cjs/graphic/group.js +34 -22
  134. package/cjs/graphic/group.js.map +1 -1
  135. package/cjs/graphic/image.d.ts +3 -2
  136. package/cjs/graphic/image.js +14 -9
  137. package/cjs/graphic/image.js.map +1 -1
  138. package/cjs/graphic/line.d.ts +5 -3
  139. package/cjs/graphic/line.js +24 -11
  140. package/cjs/graphic/line.js.map +1 -1
  141. package/cjs/graphic/node-tree.js.map +1 -1
  142. package/cjs/graphic/path.d.ts +3 -3
  143. package/cjs/graphic/path.js +17 -13
  144. package/cjs/graphic/path.js.map +1 -1
  145. package/cjs/graphic/polygon.d.ts +4 -3
  146. package/cjs/graphic/polygon.js +16 -11
  147. package/cjs/graphic/polygon.js.map +1 -1
  148. package/cjs/graphic/pyramid3d.d.ts +2 -2
  149. package/cjs/graphic/pyramid3d.js +10 -9
  150. package/cjs/graphic/pyramid3d.js.map +1 -1
  151. package/cjs/graphic/rect.d.ts +3 -3
  152. package/cjs/graphic/rect.js +16 -12
  153. package/cjs/graphic/rect.js.map +1 -1
  154. package/cjs/graphic/rect3d.js +2 -2
  155. package/cjs/graphic/rect3d.js.map +1 -1
  156. package/cjs/graphic/richtext/icon.d.ts +2 -2
  157. package/cjs/graphic/richtext/icon.js.map +1 -1
  158. package/cjs/graphic/richtext/utils.js +12 -21
  159. package/cjs/graphic/richtext/utils.js.map +1 -1
  160. package/cjs/graphic/richtext.d.ts +4 -4
  161. package/cjs/graphic/richtext.js +46 -14
  162. package/cjs/graphic/richtext.js.map +1 -1
  163. package/cjs/graphic/shadow-root.d.ts +2 -2
  164. package/cjs/graphic/shadow-root.js.map +1 -1
  165. package/cjs/graphic/symbol.d.ts +5 -3
  166. package/cjs/graphic/symbol.js +25 -12
  167. package/cjs/graphic/symbol.js.map +1 -1
  168. package/cjs/graphic/text.d.ts +10 -10
  169. package/cjs/graphic/text.js +27 -21
  170. package/cjs/graphic/text.js.map +1 -1
  171. package/cjs/graphic/theme.js.map +1 -1
  172. package/cjs/graphic/wrap-text.d.ts +1 -1
  173. package/cjs/graphic/wrap-text.js +2 -2
  174. package/cjs/graphic/wrap-text.js.map +1 -1
  175. package/cjs/index.d.ts +3 -0
  176. package/cjs/index.js +6 -4
  177. package/cjs/index.js.map +1 -1
  178. package/cjs/interface/graphic/arc.d.ts +2 -2
  179. package/cjs/interface/graphic/arc.js.map +1 -1
  180. package/cjs/interface/graphic/arc3d.d.ts +1 -1
  181. package/cjs/interface/graphic/arc3d.js.map +1 -1
  182. package/cjs/interface/graphic/area.d.ts +1 -0
  183. package/cjs/interface/graphic/area.js.map +1 -1
  184. package/cjs/interface/graphic/group.d.ts +1 -1
  185. package/cjs/interface/graphic/group.js.map +1 -1
  186. package/cjs/interface/graphic/line.d.ts +1 -0
  187. package/cjs/interface/graphic/line.js.map +1 -1
  188. package/cjs/interface/graphic/richText.d.ts +1 -0
  189. package/cjs/interface/graphic/richText.js.map +1 -1
  190. package/cjs/interface/graphic-service.d.ts +10 -17
  191. package/cjs/interface/graphic-service.js.map +1 -1
  192. package/cjs/interface/graphic.d.ts +2 -0
  193. package/cjs/interface/graphic.js.map +1 -1
  194. package/cjs/picker/pick-interceptor.d.ts +1 -1
  195. package/cjs/picker/pick-interceptor.js +6 -44
  196. package/cjs/picker/pick-interceptor.js.map +1 -1
  197. package/cjs/picker/picker-service.js +4 -5
  198. package/cjs/picker/picker-service.js.map +1 -1
  199. package/cjs/plugins/builtin-plugin/3dview-transform-plugin.d.ts +1 -0
  200. package/cjs/plugins/builtin-plugin/3dview-transform-plugin.js +8 -2
  201. package/cjs/plugins/builtin-plugin/3dview-transform-plugin.js.map +1 -1
  202. package/cjs/plugins/builtin-plugin/edit-module.d.ts +22 -0
  203. package/cjs/plugins/builtin-plugin/edit-module.js +94 -0
  204. package/cjs/plugins/builtin-plugin/edit-module.js.map +1 -0
  205. package/cjs/plugins/builtin-plugin/flex-layout-plugin.d.ts +1 -0
  206. package/cjs/plugins/builtin-plugin/flex-layout-plugin.js +8 -2
  207. package/cjs/plugins/builtin-plugin/flex-layout-plugin.js.map +1 -1
  208. package/cjs/plugins/builtin-plugin/html-attribute-plugin.js +2 -2
  209. package/cjs/plugins/builtin-plugin/html-attribute-plugin.js.map +1 -1
  210. package/cjs/plugins/builtin-plugin/react-attribute-plugin.d.ts +2 -1
  211. package/cjs/plugins/builtin-plugin/react-attribute-plugin.js +15 -7
  212. package/cjs/plugins/builtin-plugin/react-attribute-plugin.js.map +1 -1
  213. package/cjs/plugins/builtin-plugin/richtext-edit-plugin.d.ts +76 -0
  214. package/cjs/plugins/builtin-plugin/richtext-edit-plugin.js +338 -0
  215. package/cjs/plugins/builtin-plugin/richtext-edit-plugin.js.map +1 -0
  216. package/cjs/render/contributions/render/arc-render.js +12 -28
  217. package/cjs/render/contributions/render/arc-render.js.map +1 -1
  218. package/cjs/render/contributions/render/area-render.js +12 -7
  219. package/cjs/render/contributions/render/area-render.js.map +1 -1
  220. package/cjs/render/contributions/render/base-3d-render.d.ts +10 -0
  221. package/cjs/render/contributions/render/base-3d-render.js +63 -0
  222. package/cjs/render/contributions/render/base-3d-render.js.map +1 -0
  223. package/cjs/render/contributions/render/base-render.d.ts +1 -1
  224. package/cjs/render/contributions/render/base-render.js +5 -5
  225. package/cjs/render/contributions/render/base-render.js.map +1 -1
  226. package/cjs/render/contributions/render/draw-interceptor.js +7 -51
  227. package/cjs/render/contributions/render/draw-interceptor.js.map +1 -1
  228. package/cjs/render/contributions/render/group-render.js +4 -5
  229. package/cjs/render/contributions/render/group-render.js.map +1 -1
  230. package/cjs/render/contributions/render/index.d.ts +1 -0
  231. package/cjs/render/contributions/render/index.js +3 -3
  232. package/cjs/render/contributions/render/index.js.map +1 -1
  233. package/cjs/render/contributions/render/line-render.js +6 -3
  234. package/cjs/render/contributions/render/line-render.js.map +1 -1
  235. package/cjs/render/contributions/render/pyramid3d-render.d.ts +3 -5
  236. package/cjs/render/contributions/render/pyramid3d-render.js +4 -54
  237. package/cjs/render/contributions/render/pyramid3d-render.js.map +1 -1
  238. package/cjs/render/contributions/render/rect3d-render.d.ts +3 -5
  239. package/cjs/render/contributions/render/rect3d-render.js +4 -53
  240. package/cjs/render/contributions/render/rect3d-render.js.map +1 -1
  241. package/cjs/render/contributions/render/symbol-render.js +9 -18
  242. package/cjs/render/contributions/render/symbol-render.js.map +1 -1
  243. package/cjs/render/contributions/render/utils.d.ts +24 -0
  244. package/cjs/render/contributions/render/utils.js +51 -21
  245. package/cjs/render/contributions/render/utils.js.map +1 -1
  246. package/dist/index.es.js +9760 -9617
  247. package/es/allocator/matrix-allocate.d.ts +1 -1
  248. package/es/allocator/matrix-allocate.js +3 -3
  249. package/es/allocator/matrix-allocate.js.map +1 -1
  250. package/es/animate/Ticker/default-ticker.d.ts +2 -53
  251. package/es/animate/Ticker/default-ticker.js +3 -106
  252. package/es/animate/Ticker/default-ticker.js.map +1 -1
  253. package/es/animate/Ticker/index.d.ts +4 -0
  254. package/es/animate/Ticker/index.js +8 -0
  255. package/es/animate/Ticker/index.js.map +1 -1
  256. package/es/animate/Ticker/manual-ticker-handler.d.ts +15 -0
  257. package/es/animate/Ticker/manual-ticker-handler.js +28 -0
  258. package/es/animate/Ticker/manual-ticker-handler.js.map +1 -0
  259. package/es/animate/Ticker/manual-ticker.d.ts +19 -0
  260. package/es/animate/Ticker/manual-ticker.js +31 -0
  261. package/es/animate/Ticker/manual-ticker.js.map +1 -0
  262. package/es/animate/Ticker/raf-tick-handler.d.ts +9 -0
  263. package/es/animate/Ticker/raf-tick-handler.js +22 -0
  264. package/es/animate/Ticker/raf-tick-handler.js.map +1 -0
  265. package/es/animate/Ticker/timeout-tick-handler.d.ts +9 -0
  266. package/es/animate/Ticker/timeout-tick-handler.js +20 -0
  267. package/es/animate/Ticker/timeout-tick-handler.js.map +1 -0
  268. package/es/animate/Ticker/type.d.ts +6 -0
  269. package/es/animate/Ticker/type.js +7 -0
  270. package/es/animate/Ticker/type.js.map +1 -0
  271. package/es/animate/animate.js +4 -2
  272. package/es/animate/animate.js.map +1 -1
  273. package/es/animate/custom-animate.d.ts +5 -16
  274. package/es/animate/custom-animate.js +9 -58
  275. package/es/animate/custom-animate.js.map +1 -1
  276. package/es/animate/group-fade.d.ts +16 -0
  277. package/es/animate/group-fade.js +56 -0
  278. package/es/animate/group-fade.js.map +1 -0
  279. package/es/animate/index.d.ts +1 -0
  280. package/es/animate/index.js +2 -0
  281. package/es/animate/index.js.map +1 -1
  282. package/es/canvas/conical-gradient.js.map +1 -1
  283. package/es/canvas/contributions/base-canvas.js +3 -15
  284. package/es/canvas/contributions/base-canvas.js.map +1 -1
  285. package/es/canvas/util.d.ts +0 -1
  286. package/es/canvas/util.js +7 -17
  287. package/es/canvas/util.js.map +1 -1
  288. package/es/common/3d-interceptor.d.ts +3 -0
  289. package/es/common/3d-interceptor.js +46 -0
  290. package/es/common/3d-interceptor.js.map +1 -0
  291. package/es/common/bezier-utils.js +2 -1
  292. package/es/common/canvas-utils.d.ts +1 -1
  293. package/es/common/canvas-utils.js +15 -30
  294. package/es/common/canvas-utils.js.map +1 -1
  295. package/es/common/matrix.d.ts +11 -3
  296. package/es/common/matrix.js +90 -17
  297. package/es/common/matrix.js.map +1 -1
  298. package/es/common/render-command-list.js +1 -2
  299. package/es/common/render-curve.js +22 -32
  300. package/es/common/render-curve.js.map +1 -1
  301. package/es/common/render-utils.js +2 -1
  302. package/es/common/segment/catmull-rom-close.d.ts +41 -0
  303. package/es/common/segment/catmull-rom-close.js +74 -0
  304. package/es/common/segment/catmull-rom-close.js.map +1 -0
  305. package/es/common/segment/catmull-rom.d.ts +38 -0
  306. package/es/common/segment/catmull-rom.js +92 -0
  307. package/es/common/segment/catmull-rom.js.map +1 -0
  308. package/es/common/segment/index.d.ts +5 -2
  309. package/es/common/segment/index.js +11 -0
  310. package/es/common/segment/index.js.map +1 -1
  311. package/es/common/sort.js +15 -12
  312. package/es/common/sort.js.map +1 -1
  313. package/es/common/text.d.ts +0 -2
  314. package/es/common/text.js +6 -11
  315. package/es/common/text.js.map +1 -1
  316. package/es/common/utils.js +1 -1
  317. package/es/common/utils.js.map +1 -1
  318. package/es/core/camera.js +5 -3
  319. package/es/core/camera.js.map +1 -1
  320. package/es/core/contributions/layerHandler/modules.js +2 -9
  321. package/es/core/contributions/layerHandler/modules.js.map +1 -1
  322. package/es/core/stage.d.ts +2 -2
  323. package/es/core/stage.js +22 -14
  324. package/es/core/stage.js.map +1 -1
  325. package/es/event/federated-event/base-event.js +12 -2
  326. package/es/event/federated-event/base-event.js.map +1 -1
  327. package/es/graphic/arc.d.ts +6 -4
  328. package/es/graphic/arc.js +47 -16
  329. package/es/graphic/arc.js.map +1 -1
  330. package/es/graphic/arc3d.d.ts +2 -2
  331. package/es/graphic/arc3d.js +7 -10
  332. package/es/graphic/arc3d.js.map +1 -1
  333. package/es/graphic/area.d.ts +5 -3
  334. package/es/graphic/area.js +28 -11
  335. package/es/graphic/area.js.map +1 -1
  336. package/es/graphic/builtin-symbol/index.d.ts +1 -1
  337. package/es/graphic/builtin-symbol/thin-triangle.d.ts +2 -2
  338. package/es/graphic/builtin-symbol/thin-triangle.js +2 -2
  339. package/es/graphic/builtin-symbol/thin-triangle.js.map +1 -1
  340. package/es/graphic/builtin-symbol/triangle-down.d.ts +1 -2
  341. package/es/graphic/builtin-symbol/triangle-down.js +2 -7
  342. package/es/graphic/builtin-symbol/triangle-down.js.map +1 -1
  343. package/es/graphic/builtin-symbol/triangle-left.d.ts +0 -1
  344. package/es/graphic/builtin-symbol/triangle-left.js +1 -6
  345. package/es/graphic/builtin-symbol/triangle-left.js.map +1 -1
  346. package/es/graphic/builtin-symbol/triangle-right.d.ts +1 -2
  347. package/es/graphic/builtin-symbol/triangle-right.js +2 -7
  348. package/es/graphic/builtin-symbol/triangle-right.js.map +1 -1
  349. package/es/graphic/builtin-symbol/triangle-up.d.ts +1 -2
  350. package/es/graphic/builtin-symbol/triangle-up.js +2 -7
  351. package/es/graphic/builtin-symbol/triangle-up.js.map +1 -1
  352. package/es/graphic/builtin-symbol/triangle.d.ts +1 -2
  353. package/es/graphic/builtin-symbol/triangle.js +1 -3
  354. package/es/graphic/builtin-symbol/triangle.js.map +1 -1
  355. package/es/graphic/builtin-symbol/utils.js +1 -4
  356. package/es/graphic/builtin-symbol/utils.js.map +1 -1
  357. package/es/graphic/circle.d.ts +5 -3
  358. package/es/graphic/circle.js +23 -9
  359. package/es/graphic/circle.js.map +1 -1
  360. package/es/graphic/config.js +7 -3
  361. package/es/graphic/config.js.map +1 -1
  362. package/es/graphic/glyph.d.ts +4 -2
  363. package/es/graphic/glyph.js +9 -1
  364. package/es/graphic/glyph.js.map +1 -1
  365. package/es/graphic/graphic-creator.js.map +1 -1
  366. package/es/graphic/graphic-service/common-outer-boder-bounds.d.ts +3 -0
  367. package/es/graphic/graphic-service/common-outer-boder-bounds.js +9 -0
  368. package/es/graphic/graphic-service/common-outer-boder-bounds.js.map +1 -0
  369. package/es/graphic/graphic-service/graphic-service.d.ts +7 -42
  370. package/es/graphic/graphic-service/graphic-service.js +14 -388
  371. package/es/graphic/graphic-service/graphic-service.js.map +1 -1
  372. package/es/graphic/graphic-service/symbol-outer-border-bounds.d.ts +3 -0
  373. package/es/graphic/graphic-service/symbol-outer-border-bounds.js +11 -0
  374. package/es/graphic/graphic-service/symbol-outer-border-bounds.js.map +1 -0
  375. package/es/graphic/graphic.d.ts +12 -9
  376. package/es/graphic/graphic.js +20 -3
  377. package/es/graphic/graphic.js.map +1 -1
  378. package/es/graphic/group.d.ts +7 -3
  379. package/es/graphic/group.js +32 -22
  380. package/es/graphic/group.js.map +1 -1
  381. package/es/graphic/image.d.ts +3 -2
  382. package/es/graphic/image.js +15 -8
  383. package/es/graphic/image.js.map +1 -1
  384. package/es/graphic/line.d.ts +5 -3
  385. package/es/graphic/line.js +25 -10
  386. package/es/graphic/line.js.map +1 -1
  387. package/es/graphic/node-tree.js.map +1 -1
  388. package/es/graphic/path.d.ts +3 -3
  389. package/es/graphic/path.js +18 -12
  390. package/es/graphic/path.js.map +1 -1
  391. package/es/graphic/polygon.d.ts +4 -3
  392. package/es/graphic/polygon.js +17 -10
  393. package/es/graphic/polygon.js.map +1 -1
  394. package/es/graphic/pyramid3d.d.ts +2 -2
  395. package/es/graphic/pyramid3d.js +8 -10
  396. package/es/graphic/pyramid3d.js.map +1 -1
  397. package/es/graphic/rect.d.ts +3 -3
  398. package/es/graphic/rect.js +16 -10
  399. package/es/graphic/rect.js.map +1 -1
  400. package/es/graphic/rect3d.js +1 -3
  401. package/es/graphic/rect3d.js.map +1 -1
  402. package/es/graphic/richtext/icon.d.ts +2 -2
  403. package/es/graphic/richtext/icon.js.map +1 -1
  404. package/es/graphic/richtext/utils.js +9 -20
  405. package/es/graphic/richtext/utils.js.map +1 -1
  406. package/es/graphic/richtext.d.ts +4 -4
  407. package/es/graphic/richtext.js +45 -13
  408. package/es/graphic/richtext.js.map +1 -1
  409. package/es/graphic/shadow-root.d.ts +2 -2
  410. package/es/graphic/shadow-root.js.map +1 -1
  411. package/es/graphic/symbol.d.ts +5 -3
  412. package/es/graphic/symbol.js +26 -11
  413. package/es/graphic/symbol.js.map +1 -1
  414. package/es/graphic/text.d.ts +10 -10
  415. package/es/graphic/text.js +28 -23
  416. package/es/graphic/text.js.map +1 -1
  417. package/es/graphic/theme.js.map +1 -1
  418. package/es/graphic/wrap-text.d.ts +1 -1
  419. package/es/graphic/wrap-text.js +1 -3
  420. package/es/graphic/wrap-text.js.map +1 -1
  421. package/es/index.d.ts +3 -0
  422. package/es/index.js +6 -0
  423. package/es/index.js.map +1 -1
  424. package/es/interface/graphic/arc.d.ts +2 -2
  425. package/es/interface/graphic/arc.js.map +1 -1
  426. package/es/interface/graphic/arc3d.d.ts +1 -1
  427. package/es/interface/graphic/arc3d.js.map +1 -1
  428. package/es/interface/graphic/area.d.ts +1 -0
  429. package/es/interface/graphic/area.js.map +1 -1
  430. package/es/interface/graphic/group.d.ts +1 -1
  431. package/es/interface/graphic/group.js.map +1 -1
  432. package/es/interface/graphic/line.d.ts +1 -0
  433. package/es/interface/graphic/line.js.map +1 -1
  434. package/es/interface/graphic/richText.d.ts +1 -0
  435. package/es/interface/graphic/richText.js.map +1 -1
  436. package/es/interface/graphic-service.d.ts +10 -17
  437. package/es/interface/graphic-service.js.map +1 -1
  438. package/es/interface/graphic.d.ts +2 -0
  439. package/es/interface/graphic.js.map +1 -1
  440. package/es/picker/pick-interceptor.d.ts +1 -1
  441. package/es/picker/pick-interceptor.js +10 -46
  442. package/es/picker/pick-interceptor.js.map +1 -1
  443. package/es/picker/picker-service.js +1 -1
  444. package/es/picker/picker-service.js.map +1 -1
  445. package/es/plugins/builtin-plugin/3dview-transform-plugin.d.ts +1 -0
  446. package/es/plugins/builtin-plugin/3dview-transform-plugin.js +6 -0
  447. package/es/plugins/builtin-plugin/3dview-transform-plugin.js.map +1 -1
  448. package/es/plugins/builtin-plugin/edit-module.d.ts +22 -0
  449. package/es/plugins/builtin-plugin/edit-module.js +86 -0
  450. package/es/plugins/builtin-plugin/edit-module.js.map +1 -0
  451. package/es/plugins/builtin-plugin/flex-layout-plugin.d.ts +1 -0
  452. package/es/plugins/builtin-plugin/flex-layout-plugin.js +6 -0
  453. package/es/plugins/builtin-plugin/flex-layout-plugin.js.map +1 -1
  454. package/es/plugins/builtin-plugin/html-attribute-plugin.js +2 -2
  455. package/es/plugins/builtin-plugin/html-attribute-plugin.js.map +1 -1
  456. package/es/plugins/builtin-plugin/react-attribute-plugin.d.ts +2 -1
  457. package/es/plugins/builtin-plugin/react-attribute-plugin.js +15 -7
  458. package/es/plugins/builtin-plugin/react-attribute-plugin.js.map +1 -1
  459. package/es/plugins/builtin-plugin/richtext-edit-plugin.d.ts +76 -0
  460. package/es/plugins/builtin-plugin/richtext-edit-plugin.js +334 -0
  461. package/es/plugins/builtin-plugin/richtext-edit-plugin.js.map +1 -0
  462. package/es/render/contributions/render/arc-render.js +7 -16
  463. package/es/render/contributions/render/arc-render.js.map +1 -1
  464. package/es/render/contributions/render/area-render.js +12 -6
  465. package/es/render/contributions/render/area-render.js.map +1 -1
  466. package/es/render/contributions/render/base-3d-render.d.ts +10 -0
  467. package/es/render/contributions/render/base-3d-render.js +57 -0
  468. package/es/render/contributions/render/base-3d-render.js.map +1 -0
  469. package/es/render/contributions/render/base-render.d.ts +1 -1
  470. package/es/render/contributions/render/base-render.js +3 -1
  471. package/es/render/contributions/render/base-render.js.map +1 -1
  472. package/es/render/contributions/render/draw-interceptor.js +7 -51
  473. package/es/render/contributions/render/draw-interceptor.js.map +1 -1
  474. package/es/render/contributions/render/group-render.js +3 -1
  475. package/es/render/contributions/render/group-render.js.map +1 -1
  476. package/es/render/contributions/render/index.d.ts +1 -0
  477. package/es/render/contributions/render/index.js +2 -0
  478. package/es/render/contributions/render/index.js.map +1 -1
  479. package/es/render/contributions/render/line-render.js +6 -3
  480. package/es/render/contributions/render/line-render.js.map +1 -1
  481. package/es/render/contributions/render/pyramid3d-render.d.ts +3 -5
  482. package/es/render/contributions/render/pyramid3d-render.js +4 -56
  483. package/es/render/contributions/render/pyramid3d-render.js.map +1 -1
  484. package/es/render/contributions/render/rect3d-render.d.ts +3 -5
  485. package/es/render/contributions/render/rect3d-render.js +4 -55
  486. package/es/render/contributions/render/rect3d-render.js.map +1 -1
  487. package/es/render/contributions/render/symbol-render.js +9 -18
  488. package/es/render/contributions/render/symbol-render.js.map +1 -1
  489. package/es/render/contributions/render/utils.d.ts +24 -0
  490. package/es/render/contributions/render/utils.js +41 -13
  491. package/es/render/contributions/render/utils.js.map +1 -1
  492. package/package.json +4 -4
  493. package/cjs/graphic/graphic-service/common-contribution.d.ts +0 -5
  494. package/cjs/graphic/graphic-service/common-contribution.js +0 -19
  495. package/cjs/graphic/graphic-service/common-contribution.js.map +0 -1
  496. package/cjs/graphic/graphic-service/symbol-contribution.d.ts +0 -6
  497. package/cjs/graphic/graphic-service/symbol-contribution.js +0 -21
  498. package/cjs/graphic/graphic-service/symbol-contribution.js.map +0 -1
  499. package/es/graphic/graphic-service/common-contribution.d.ts +0 -5
  500. package/es/graphic/graphic-service/common-contribution.js +0 -11
  501. package/es/graphic/graphic-service/common-contribution.js.map +0 -1
  502. package/es/graphic/graphic-service/symbol-contribution.d.ts +0 -6
  503. package/es/graphic/graphic-service/symbol-contribution.js +0 -15
  504. package/es/graphic/graphic-service/symbol-contribution.js.map +0 -1
@@ -7,7 +7,8 @@ export declare class ReactAttributePlugin extends HtmlAttributePlugin implements
7
7
  _uid: number;
8
8
  key: string;
9
9
  htmlMap: Record<string, {
10
- root: any;
10
+ root?: any;
11
+ unmount?: () => void;
11
12
  wrapContainer: HTMLElement;
12
13
  nativeContainer: HTMLElement;
13
14
  container: string | HTMLElement | null;
@@ -15,12 +15,12 @@ export class ReactAttributePlugin extends HtmlAttributePlugin {
15
15
  }
16
16
  removeElement(id) {
17
17
  if (!this.htmlMap || !this.htmlMap[id]) return;
18
- const {root: root, wrapContainer: wrapContainer} = this.htmlMap[id];
18
+ const {root: root, wrapContainer: wrapContainer, unmount: unmount} = this.htmlMap[id];
19
19
  if (root) {
20
20
  application.global.getRequestAnimationFrame()((() => {
21
21
  root.unmount();
22
22
  }));
23
- }
23
+ } else unmount && unmount();
24
24
  wrapContainer && application.global.removeDom(wrapContainer), this.htmlMap[id] = null;
25
25
  }
26
26
  renderGraphicHTML(graphic) {
@@ -30,21 +30,29 @@ export class ReactAttributePlugin extends HtmlAttributePlugin {
30
30
  const stage = graphic.stage;
31
31
  if (!stage) return;
32
32
  const ReactDOM = stage.params.ReactDOM, {element: element, container: container} = react;
33
- if (!(element && ReactDOM && ReactDOM.createRoot)) return;
33
+ if (!element || !ReactDOM || !ReactDOM.createRoot && !ReactDOM.render) return;
34
34
  const id = isNil(react.id) ? `${null !== (_a = graphic.id) && void 0 !== _a ? _a : graphic._uid}_react` : react.id;
35
35
  if (this.htmlMap && this.htmlMap[id] && container && container !== this.htmlMap[id].container && this.removeElement(id),
36
- this.htmlMap && this.htmlMap[id]) this.htmlMap[id].root.render(element); else {
36
+ this.htmlMap && this.htmlMap[id]) ReactDOM.createRoot ? this.htmlMap[id].root.render(element) : ReactDOM.render(element, this.htmlMap[id].wrapContainer); else {
37
37
  const {wrapContainer: wrapContainer, nativeContainer: nativeContainer} = this.getWrapContainer(stage, container);
38
- if (wrapContainer) {
38
+ if (wrapContainer) if (this.htmlMap || (this.htmlMap = {}), ReactDOM.createRoot) {
39
39
  const root = ReactDOM.createRoot(wrapContainer);
40
- root.render(element), this.htmlMap || (this.htmlMap = {}), this.htmlMap[id] = {
40
+ root.render(element), this.htmlMap[id] = {
41
41
  root: root,
42
42
  wrapContainer: wrapContainer,
43
43
  nativeContainer: nativeContainer,
44
44
  container: container,
45
45
  renderId: this.renderId
46
46
  };
47
- }
47
+ } else ReactDOM.render(element, wrapContainer), this.htmlMap[id] = {
48
+ wrapContainer: wrapContainer,
49
+ nativeContainer: nativeContainer,
50
+ container: container,
51
+ renderId: this.renderId,
52
+ unmount: () => {
53
+ ReactDOM.unmountComponentAtNode(wrapContainer);
54
+ }
55
+ };
48
56
  }
49
57
  if (!this.htmlMap || !this.htmlMap[id]) return;
50
58
  const {wrapContainer: wrapContainer, nativeContainer: nativeContainer} = this.htmlMap[id];
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/plugins/builtin-plugin/react-attribute-plugin.ts"],"names":[],"mappings":"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","file":"react-attribute-plugin.js","sourcesContent":["import { Generator } from '../../common/generator';\nimport type { IGraphic, IPlugin, IPluginService } from '../../interface';\nimport { application } from '../../application';\nimport { HtmlAttributePlugin } from './html-attribute-plugin';\nimport { isNil } from '@visactor/vutils';\nimport { Factory } from '../../factory';\n\nexport class ReactAttributePlugin extends HtmlAttributePlugin implements IPlugin {\n name: 'ReactAttributePlugin' = 'ReactAttributePlugin';\n activeEvent: 'onRegister' = 'onRegister';\n declare pluginService: IPluginService;\n _uid: number = Generator.GenAutoIncrementId();\n key: string = this.name + this._uid;\n\n htmlMap: Record<\n string,\n {\n root: any;\n wrapContainer: HTMLElement;\n nativeContainer: HTMLElement;\n container: string | HTMLElement | null;\n renderId: number;\n }\n > = {};\n\n removeElement(id: string) {\n if (!this.htmlMap || !this.htmlMap[id]) {\n return;\n }\n\n const { root, wrapContainer } = this.htmlMap[id];\n\n if (root) {\n const raf = application.global.getRequestAnimationFrame();\n raf(() => {\n root.unmount();\n });\n }\n\n wrapContainer && application.global.removeDom(wrapContainer);\n\n this.htmlMap[id] = null;\n }\n\n renderGraphicHTML(graphic: IGraphic) {\n const { react } = graphic.attribute;\n if (!react) {\n return;\n }\n const stage = graphic.stage;\n if (!stage) {\n return;\n }\n const ReactDOM = stage.params.ReactDOM;\n const { element, container } = react;\n if (!(element && ReactDOM && ReactDOM.createRoot)) {\n return;\n }\n const id = isNil(react.id) ? `${graphic.id ?? graphic._uid}_react` : react.id;\n\n if (this.htmlMap && this.htmlMap[id] && container && container !== this.htmlMap[id].container) {\n this.removeElement(id);\n }\n\n if (!this.htmlMap || !this.htmlMap[id]) {\n // createa a wrapper contianer to be the root of react element\n const { wrapContainer, nativeContainer } = this.getWrapContainer(stage, container);\n\n if (wrapContainer) {\n const root = ReactDOM.createRoot(wrapContainer);\n root.render(element);\n\n if (!this.htmlMap) {\n this.htmlMap = {};\n }\n\n this.htmlMap[id] = { root, wrapContainer, nativeContainer, container, renderId: this.renderId };\n }\n } else {\n // update react element\n this.htmlMap[id].root.render(element);\n }\n\n if (!this.htmlMap || !this.htmlMap[id]) {\n return;\n }\n\n const { wrapContainer, nativeContainer } = this.htmlMap[id];\n\n this.updateStyleOfWrapContainer(graphic, stage, wrapContainer, nativeContainer, react);\n this.htmlMap[id].renderId = this.renderId;\n }\n}\n\nexport const registerReactAttributePlugin = () => {\n Factory.registerPlugin('ReactAttributePlugin', ReactAttributePlugin);\n};\n"]}
1
+ {"version":3,"sources":["../src/plugins/builtin-plugin/react-attribute-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,MAAM,OAAO,oBAAqB,SAAQ,mBAAmB;IAA7D;;QACE,SAAI,GAA2B,sBAAsB,CAAC;QACtD,gBAAW,GAAiB,YAAY,CAAC;QAEzC,SAAI,GAAW,SAAS,CAAC,kBAAkB,EAAE,CAAC;QAC9C,QAAG,GAAW,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QAEpC,YAAO,GAUH,EAAE,CAAC;IAwFT,CAAC;IAtFC,aAAa,CAAC,EAAU;QACtB,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;YACtC,OAAO;SACR;QAED,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAE1D,IAAI,IAAI,EAAE;YACR,MAAM,GAAG,GAAG,WAAW,CAAC,MAAM,CAAC,wBAAwB,EAAE,CAAC;YAC1D,GAAG,CAAC,GAAG,EAAE;gBACP,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,CAAC,CAAC,CAAC;SACJ;aAAM,IAAI,OAAO,EAAE;YAClB,OAAO,EAAE,CAAC;SACX;QAED,aAAa,IAAI,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QAE7D,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;IAC1B,CAAC;IAED,iBAAiB,CAAC,OAAiB;;QACjC,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC;QACpC,IAAI,CAAC,KAAK,EAAE;YACV,OAAO;SACR;QACD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC5B,IAAI,CAAC,KAAK,EAAE;YACV,OAAO;SACR;QACD,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC;QACvC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;QACrC,IAAI,CAAC,CAAC,OAAO,IAAI,QAAQ,IAAI,CAAC,QAAQ,CAAC,UAAU,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE;YACtE,OAAO;SACR;QACD,MAAM,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,MAAA,OAAO,CAAC,EAAE,mCAAI,OAAO,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;QAE9E,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,SAAS,IAAI,SAAS,KAAK,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE;YAC7F,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;SACxB;QAED,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;YAEtC,MAAM,EAAE,aAAa,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YAEnF,IAAI,aAAa,EAAE;gBACjB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;oBACjB,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;iBACnB;gBACD,IAAI,QAAQ,CAAC,UAAU,EAAE;oBACvB,MAAM,IAAI,GAAG,QAAQ,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;oBAChD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;oBAErB,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,aAAa,EAAE,eAAe,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;iBACjG;qBAAM;oBACL,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;oBAExC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG;wBACjB,aAAa;wBACb,eAAe;wBACf,SAAS;wBACT,QAAQ,EAAE,IAAI,CAAC,QAAQ;wBACvB,OAAO,EAAE,GAAG,EAAE;4BACZ,QAAQ,CAAC,sBAAsB,CAAC,aAAa,CAAC,CAAC;wBACjD,CAAC;qBACF,CAAC;iBACH;aACF;SACF;aAAM;YAEL,IAAI,QAAQ,CAAC,UAAU,EAAE;gBACvB,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;aACvC;iBAAM;gBACL,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC;aAC1D;SACF;QAED,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;YACtC,OAAO;SACR;QAED,MAAM,EAAE,aAAa,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAE5D,IAAI,CAAC,0BAA0B,CAAC,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,KAAK,CAAC,CAAC;QACvF,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IAC5C,CAAC;CACF;AAED,MAAM,CAAC,MAAM,4BAA4B,GAAG,GAAG,EAAE;IAC/C,OAAO,CAAC,cAAc,CAAC,sBAAsB,EAAE,oBAAoB,CAAC,CAAC;AACvE,CAAC,CAAC","file":"react-attribute-plugin.js","sourcesContent":["import { Generator } from '../../common/generator';\nimport type { IGraphic, IPlugin, IPluginService } from '../../interface';\nimport { application } from '../../application';\nimport { HtmlAttributePlugin } from './html-attribute-plugin';\nimport { isNil } from '@visactor/vutils';\nimport { Factory } from '../../factory';\n\nexport class ReactAttributePlugin extends HtmlAttributePlugin implements IPlugin {\n name: 'ReactAttributePlugin' = 'ReactAttributePlugin';\n activeEvent: 'onRegister' = 'onRegister';\n declare pluginService: IPluginService;\n _uid: number = Generator.GenAutoIncrementId();\n key: string = this.name + this._uid;\n\n htmlMap: Record<\n string,\n {\n root?: any;\n unmount?: () => void;\n wrapContainer: HTMLElement;\n nativeContainer: HTMLElement;\n container: string | HTMLElement | null;\n renderId: number;\n }\n > = {};\n\n removeElement(id: string) {\n if (!this.htmlMap || !this.htmlMap[id]) {\n return;\n }\n\n const { root, wrapContainer, unmount } = this.htmlMap[id];\n\n if (root) {\n const raf = application.global.getRequestAnimationFrame();\n raf(() => {\n root.unmount();\n });\n } else if (unmount) {\n unmount();\n }\n\n wrapContainer && application.global.removeDom(wrapContainer);\n\n this.htmlMap[id] = null;\n }\n\n renderGraphicHTML(graphic: IGraphic) {\n const { react } = graphic.attribute;\n if (!react) {\n return;\n }\n const stage = graphic.stage;\n if (!stage) {\n return;\n }\n const ReactDOM = stage.params.ReactDOM;\n const { element, container } = react;\n if (!(element && ReactDOM && (ReactDOM.createRoot || ReactDOM.render))) {\n return;\n }\n const id = isNil(react.id) ? `${graphic.id ?? graphic._uid}_react` : react.id;\n\n if (this.htmlMap && this.htmlMap[id] && container && container !== this.htmlMap[id].container) {\n this.removeElement(id);\n }\n\n if (!this.htmlMap || !this.htmlMap[id]) {\n // createa a wrapper contianer to be the root of react element\n const { wrapContainer, nativeContainer } = this.getWrapContainer(stage, container);\n\n if (wrapContainer) {\n if (!this.htmlMap) {\n this.htmlMap = {};\n }\n if (ReactDOM.createRoot) {\n const root = ReactDOM.createRoot(wrapContainer);\n root.render(element);\n\n this.htmlMap[id] = { root, wrapContainer, nativeContainer, container, renderId: this.renderId };\n } else {\n ReactDOM.render(element, wrapContainer);\n\n this.htmlMap[id] = {\n wrapContainer,\n nativeContainer,\n container,\n renderId: this.renderId,\n unmount: () => {\n ReactDOM.unmountComponentAtNode(wrapContainer);\n }\n };\n }\n }\n } else {\n // update react element\n if (ReactDOM.createRoot) {\n this.htmlMap[id].root.render(element);\n } else {\n ReactDOM.render(element, this.htmlMap[id].wrapContainer);\n }\n }\n\n if (!this.htmlMap || !this.htmlMap[id]) {\n return;\n }\n\n const { wrapContainer, nativeContainer } = this.htmlMap[id];\n\n this.updateStyleOfWrapContainer(graphic, stage, wrapContainer, nativeContainer, react);\n this.htmlMap[id].renderId = this.renderId;\n }\n}\n\nexport const registerReactAttributePlugin = () => {\n Factory.registerPlugin('ReactAttributePlugin', ReactAttributePlugin);\n};\n"]}
@@ -0,0 +1,76 @@
1
+ import type { IPointLike } from '@visactor/vutils';
2
+ import type { IGroup, ILine, IPlugin, IPluginService, IRichText, IRichTextFrame, IRichTextIcon, IRichTextLine, IRichTextParagraph } from '../../interface';
3
+ import { EditModule } from './edit-module';
4
+ type UpdateType = 'input' | 'change' | 'onfocus' | 'defocus' | 'selection' | 'dispatch';
5
+ declare class Selection {
6
+ cacheSelectionStartCursorIdx: number;
7
+ cacheCurCursorIdx: number;
8
+ selectionStartCursorIdx: number;
9
+ curCursorIdx: number;
10
+ rt: IRichText;
11
+ constructor(cacheSelectionStartCursorIdx: number, cacheCurCursorIdx: number, selectionStartCursorIdx: number, curCursorIdx: number, rt: IRichText);
12
+ hasFormat(key: string): boolean;
13
+ getFormat(key: string): any;
14
+ getAllFormat(key: string): any;
15
+ }
16
+ export declare const FORMAT_TEXT_COMMAND = "FORMAT_TEXT_COMMAND";
17
+ export declare const FORMAT_ELEMENT_COMMAND = "FORMAT_ELEMENT_COMMAND";
18
+ export declare class RichTextEditPlugin implements IPlugin {
19
+ name: 'RichTextEditPlugin';
20
+ activeEvent: 'onRegister';
21
+ pluginService: IPluginService;
22
+ _uid: number;
23
+ key: string;
24
+ editing: boolean;
25
+ editLine: ILine;
26
+ editBg: IGroup;
27
+ pointerDown: boolean;
28
+ lastPoint?: IPointLike;
29
+ editModule: EditModule;
30
+ currRt: IRichText;
31
+ curCursorIdx: number;
32
+ selectionStartCursorIdx: number;
33
+ commandCbs: Map<string, Array<(payload: any, p: RichTextEditPlugin) => void>>;
34
+ updateCbs: Array<(type: UpdateType, p: RichTextEditPlugin) => void>;
35
+ constructor();
36
+ getSelection(): Selection;
37
+ formatTextCommandCb(payload: string, p: RichTextEditPlugin): void;
38
+ dispatchCommand(command: string, payload: any): void;
39
+ registerCommand(command: string, cb: (payload: any, p: RichTextEditPlugin) => void): void;
40
+ registerUpdateListener(cb: (type: UpdateType, p: RichTextEditPlugin) => void): void;
41
+ activate(context: IPluginService): void;
42
+ handleInput: (text: string, isComposing: boolean, cursorIdx: number, rt: IRichText, orient: 'left' | 'right') => void;
43
+ handleChange: (text: string, isComposing: boolean, cursorIdx: number, rt: IRichText, orient: 'left' | 'right') => void;
44
+ handleMove: (e: PointerEvent) => void;
45
+ showSelection(e: PointerEvent): void;
46
+ hideSelection(): void;
47
+ handlePointerDown: (e: PointerEvent) => void;
48
+ handlePointerUp: (e: PointerEvent) => void;
49
+ handleEnter: (e: PointerEvent) => void;
50
+ handleLeave: (e: PointerEvent) => void;
51
+ isRichtext(e: PointerEvent): boolean;
52
+ protected getEventPosition(e: PointerEvent): IPointLike;
53
+ protected getLineByPoint(cache: IRichTextFrame, p1: IPointLike): IRichTextLine;
54
+ protected getColumnByLinePoint(lineInfo: IRichTextLine, p1: IPointLike): IRichTextParagraph | IRichTextIcon;
55
+ onFocus(e: PointerEvent): void;
56
+ protected getPointByColumnIdx(idx: number, rt: IRichText, orient: 'left' | 'right'): {
57
+ x: any;
58
+ y1: number;
59
+ y2: number;
60
+ };
61
+ protected getColumnIndex(cache: IRichTextFrame, cInfo: IRichTextParagraph | IRichTextIcon): number;
62
+ protected getColumnByIndex(cache: IRichTextFrame, index: number): {
63
+ lineInfo: IRichTextLine;
64
+ columnInfo: IRichTextParagraph | IRichTextIcon;
65
+ } | null;
66
+ protected setCursorAndTextArea(x: number, y1: number, y2: number, rt: IRichText): void;
67
+ protected setCursor(x: number, y1: number, y2: number): void;
68
+ applyUpdate(): void;
69
+ deFocus(e: PointerEvent): void;
70
+ splitText(text: string): string[];
71
+ tryUpdateRichtext(richtext: IRichText): void;
72
+ onSelect(): void;
73
+ deactivate(context: IPluginService): void;
74
+ release(): void;
75
+ }
76
+ export {};
@@ -0,0 +1,334 @@
1
+ import { isObject, isString, merge } from "@visactor/vutils";
2
+
3
+ import { Generator } from "../../common/generator";
4
+
5
+ import { createGroup, createLine, createRect } from "../../graphic";
6
+
7
+ import { EditModule, findCursorIndexIgnoreLinebreak } from "./edit-module";
8
+
9
+ class Selection {
10
+ constructor(cacheSelectionStartCursorIdx, cacheCurCursorIdx, selectionStartCursorIdx, curCursorIdx, rt) {
11
+ this.curCursorIdx = curCursorIdx, this.selectionStartCursorIdx = selectionStartCursorIdx,
12
+ this.cacheCurCursorIdx = cacheCurCursorIdx, this.cacheSelectionStartCursorIdx = cacheSelectionStartCursorIdx,
13
+ this.rt = rt;
14
+ }
15
+ hasFormat(key) {
16
+ return null != this.getFormat(key);
17
+ }
18
+ getFormat(key) {
19
+ if (!this.rt) return null;
20
+ const config = this.rt.attribute.textConfig, val = config[this.selectionStartCursorIdx + 1][key];
21
+ if (null == val) return null;
22
+ for (let i = this.selectionStartCursorIdx + 2; i <= this.curCursorIdx; i++) {
23
+ if (val !== config[i][key]) return null;
24
+ }
25
+ return val;
26
+ }
27
+ getAllFormat(key) {
28
+ if (!this.rt) return [];
29
+ const config = this.rt.attribute.textConfig, val = config[this.selectionStartCursorIdx + 1][key], set = new Set;
30
+ set.add(val);
31
+ for (let i = this.selectionStartCursorIdx + 2; i <= this.curCursorIdx; i++) {
32
+ const item = config[i];
33
+ set.add(item[key]);
34
+ }
35
+ return Array.from(set.values());
36
+ }
37
+ }
38
+
39
+ export const FORMAT_TEXT_COMMAND = "FORMAT_TEXT_COMMAND";
40
+
41
+ export const FORMAT_ELEMENT_COMMAND = "FORMAT_ELEMENT_COMMAND";
42
+
43
+ export class RichTextEditPlugin {
44
+ constructor() {
45
+ this.name = "RichTextEditPlugin", this.activeEvent = "onRegister", this._uid = Generator.GenAutoIncrementId(),
46
+ this.key = this.name + this._uid, this.editing = !1, this.pointerDown = !1, this.handleInput = (text, isComposing, cursorIdx, rt, orient) => {
47
+ const p = this.getPointByColumnIdx(cursorIdx, rt, orient);
48
+ this.hideSelection(), this.setCursor(p.x, p.y1, p.y2), this.updateCbs.forEach((cb => cb("input", this)));
49
+ }, this.handleChange = (text, isComposing, cursorIdx, rt, orient) => {
50
+ const p = this.getPointByColumnIdx(cursorIdx, rt, orient);
51
+ this.curCursorIdx = cursorIdx, this.selectionStartCursorIdx = cursorIdx, this.setCursorAndTextArea(p.x, p.y1, p.y2, rt),
52
+ this.hideSelection(), this.updateCbs.forEach((cb => cb("change", this)));
53
+ }, this.handleMove = e => {
54
+ this.isRichtext(e) && (this.currRt = e.target, this.handleEnter(e), e.target.once("pointerleave", this.handleLeave),
55
+ this.showSelection(e));
56
+ }, this.handlePointerDown = e => {
57
+ this.editing ? this.onFocus(e) : this.deFocus(e), this.applyUpdate(), this.pointerDown = !0,
58
+ this.updateCbs.forEach((cb => cb(this.editing ? "onfocus" : "defocus", this)));
59
+ }, this.handlePointerUp = e => {
60
+ this.pointerDown = !1;
61
+ }, this.handleEnter = e => {
62
+ this.editing = !0, this.pluginService.stage.setCursor("text");
63
+ }, this.handleLeave = e => {
64
+ this.editing = !1, this.pluginService.stage.setCursor("default");
65
+ }, this.commandCbs = new Map, this.commandCbs.set(FORMAT_TEXT_COMMAND, [ this.formatTextCommandCb ]),
66
+ this.updateCbs = [];
67
+ }
68
+ getSelection() {
69
+ return this.selectionStartCursorIdx && this.curCursorIdx && this.selectionStartCursorIdx !== this.curCursorIdx && this.currRt ? new Selection(this.selectionStartCursorIdx, this.curCursorIdx, findCursorIndexIgnoreLinebreak(this.currRt.attribute.textConfig, this.selectionStartCursorIdx), findCursorIndexIgnoreLinebreak(this.currRt.attribute.textConfig, this.curCursorIdx), this.currRt) : null;
70
+ }
71
+ formatTextCommandCb(payload, p) {
72
+ const rt = p.currRt;
73
+ if (!rt) return;
74
+ const selectionData = p.getSelection();
75
+ if (!selectionData) return;
76
+ const {selectionStartCursorIdx: selectionStartCursorIdx, curCursorIdx: curCursorIdx} = selectionData, config = rt.attribute.textConfig.slice(selectionStartCursorIdx + 1, curCursorIdx + 1);
77
+ "bold" === payload ? config.forEach((item => item.fontWeight = "bold")) : "italic" === payload ? config.forEach((item => item.fontStyle = "italic")) : "underline" === payload ? config.forEach((item => item.underline = !0)) : "lineThrough" === payload ? config.forEach((item => item.lineThrough = !0)) : isObject(payload) && config.forEach((item => merge(item, payload))),
78
+ rt.setAttributes(rt.attribute);
79
+ }
80
+ dispatchCommand(command, payload) {
81
+ const cbs = this.commandCbs.get(command);
82
+ cbs && cbs.forEach((cb => cb(payload, this))), this.updateCbs.forEach((cb => cb("dispatch", this)));
83
+ }
84
+ registerCommand(command, cb) {
85
+ (this.commandCbs.get(command) || []).push(cb);
86
+ }
87
+ registerUpdateListener(cb) {
88
+ (this.updateCbs || []).push(cb);
89
+ }
90
+ activate(context) {
91
+ this.pluginService = context, this.editModule = new EditModule, context.stage.on("pointermove", this.handleMove),
92
+ context.stage.on("pointerdown", this.handlePointerDown), context.stage.on("pointerup", this.handlePointerUp),
93
+ context.stage.on("pointerleave", this.handlePointerUp), this.editModule.onInput(this.handleInput),
94
+ this.editModule.onChange(this.handleChange);
95
+ }
96
+ showSelection(e) {
97
+ const cache = e.target.getFrameCache();
98
+ if (cache && this.editBg && this.pointerDown) {
99
+ let p0 = this.lastPoint, p1 = this.getEventPosition(e), line1Info = this.getLineByPoint(cache, p1);
100
+ const column1 = this.getColumnByLinePoint(line1Info, p1), y1 = line1Info.top, y2 = line1Info.top + line1Info.height;
101
+ let x = column1.left + column1.width, cursorIndex = this.getColumnIndex(cache, column1);
102
+ p1.x < column1.left + column1.width / 2 && (x = column1.left, cursorIndex -= 1),
103
+ p1.x = x, p1.y = (y1 + y2) / 2;
104
+ let line0Info = this.getLineByPoint(cache, p0);
105
+ if ((p0.y > p1.y || p0.y === p1.y && p0.x > p1.x) && ([p0, p1] = [ p1, p0 ], [line1Info, line0Info] = [ line0Info, line1Info ]),
106
+ this.editBg.removeAllChild(), line0Info === line1Info) {
107
+ const column0 = this.getColumnByLinePoint(line0Info, p0);
108
+ this.editBg.setAttributes({
109
+ x: p0.x,
110
+ y: line0Info.top,
111
+ width: p1.x - p0.x,
112
+ height: column0.height,
113
+ fill: "#336df4",
114
+ fillOpacity: .2
115
+ });
116
+ } else {
117
+ this.editBg.setAttributes({
118
+ x: 0,
119
+ y: line0Info.top,
120
+ width: 0,
121
+ height: 0
122
+ });
123
+ const startIdx = cache.lines.findIndex((item => item === line0Info)), endIdx = cache.lines.findIndex((item => item === line1Info));
124
+ let y = 0;
125
+ for (let i = startIdx; i <= endIdx; i++) {
126
+ const line = cache.lines[i];
127
+ if (i === startIdx) {
128
+ const p = line.paragraphs[line.paragraphs.length - 1];
129
+ this.editBg.add(createRect({
130
+ x: p0.x,
131
+ y: y,
132
+ width: p.left + p.width - p0.x,
133
+ height: line.height,
134
+ fill: "#336df4",
135
+ fillOpacity: .2
136
+ }));
137
+ } else if (i === endIdx) {
138
+ const p = line.paragraphs[0];
139
+ this.editBg.add(createRect({
140
+ x: p.left,
141
+ y: y,
142
+ width: p1.x - p.left,
143
+ height: line.height,
144
+ fill: "#336df4",
145
+ fillOpacity: .2
146
+ }));
147
+ } else {
148
+ const p0 = line.paragraphs[0], p1 = line.paragraphs[line.paragraphs.length - 1];
149
+ this.editBg.add(createRect({
150
+ x: p0.left,
151
+ y: y,
152
+ width: p1.left + p1.width - p0.left,
153
+ height: line.height,
154
+ fill: "#336df4",
155
+ fillOpacity: .2
156
+ }));
157
+ }
158
+ y += line.height;
159
+ }
160
+ }
161
+ this.curCursorIdx = cursorIndex, this.setCursorAndTextArea(x, y1 + 2, y2 - 2, e.target),
162
+ this.applyUpdate(), this.updateCbs.forEach((cb => cb("selection", this)));
163
+ }
164
+ }
165
+ hideSelection() {
166
+ this.editBg && (this.editBg.removeAllChild(), this.editBg.setAttributes({
167
+ fill: "transparent"
168
+ }));
169
+ }
170
+ isRichtext(e) {
171
+ return !(!e.target || "richtext" !== e.target.type || !e.target.attribute.editable);
172
+ }
173
+ getEventPosition(e) {
174
+ const p = this.pluginService.stage.eventPointTransform(e), p1 = {
175
+ x: 0,
176
+ y: 0
177
+ };
178
+ return e.target.globalTransMatrix.transformPoint(p, p1), p1;
179
+ }
180
+ getLineByPoint(cache, p1) {
181
+ let lineInfo = cache.lines[0];
182
+ for (let i = 0; i < cache.lines.length && !(lineInfo.top <= p1.y && lineInfo.top + lineInfo.height >= p1.y); i++) lineInfo = cache.lines[i + 1];
183
+ return lineInfo;
184
+ }
185
+ getColumnByLinePoint(lineInfo, p1) {
186
+ let columnInfo = lineInfo.paragraphs[0];
187
+ for (let i = 0; i < lineInfo.paragraphs.length && !(columnInfo.left <= p1.x && columnInfo.left + columnInfo.width >= p1.x); i++) columnInfo = lineInfo.paragraphs[i];
188
+ return columnInfo;
189
+ }
190
+ onFocus(e) {
191
+ this.deFocus(e);
192
+ const target = e.target;
193
+ this.tryUpdateRichtext(target);
194
+ const shadowRoot = target.attachShadow();
195
+ shadowRoot.setAttributes({
196
+ shadowRootIdx: -1
197
+ });
198
+ const cache = target.getFrameCache();
199
+ if (!cache) return;
200
+ if (!this.editLine) {
201
+ const line = createLine({
202
+ x: 0,
203
+ y: 0,
204
+ lineWidth: 1,
205
+ stroke: "black"
206
+ });
207
+ line.animate().to({
208
+ opacity: 1
209
+ }, 10, "linear").wait(700).to({
210
+ opacity: 0
211
+ }, 10, "linear").wait(700).loop(1 / 0), this.editLine = line;
212
+ const g = createGroup({
213
+ x: 0,
214
+ y: 0,
215
+ width: 0,
216
+ height: 0
217
+ });
218
+ this.editBg = g, shadowRoot.add(this.editLine), shadowRoot.add(this.editBg);
219
+ }
220
+ const p1 = this.getEventPosition(e), lineInfo = this.getLineByPoint(cache, p1);
221
+ if (lineInfo) {
222
+ const columnInfo = this.getColumnByLinePoint(lineInfo, p1);
223
+ if (!columnInfo) return;
224
+ let y1 = lineInfo.top, y2 = lineInfo.top + lineInfo.height, x = columnInfo.left + columnInfo.width;
225
+ y1 += 2, y2 -= 2;
226
+ let cursorIndex = this.getColumnIndex(cache, columnInfo);
227
+ p1.x < columnInfo.left + columnInfo.width / 2 && (x = columnInfo.left, cursorIndex -= 1),
228
+ this.lastPoint = {
229
+ x: x,
230
+ y: (y1 + y2) / 2
231
+ }, this.curCursorIdx = cursorIndex, this.selectionStartCursorIdx = cursorIndex,
232
+ this.setCursorAndTextArea(x, y1, y2, target);
233
+ }
234
+ }
235
+ getPointByColumnIdx(idx, rt, orient) {
236
+ const cache = rt.getFrameCache(), {lineInfo: lineInfo, columnInfo: columnInfo} = this.getColumnByIndex(cache, idx);
237
+ let y1 = lineInfo.top, y2 = lineInfo.top + lineInfo.height;
238
+ return y1 += 2, y2 -= 2, {
239
+ x: columnInfo.left + ("left" === orient ? 0 : columnInfo.width),
240
+ y1: y1,
241
+ y2: y2
242
+ };
243
+ }
244
+ getColumnIndex(cache, cInfo) {
245
+ let inputIndex = -1;
246
+ for (let i = 0; i < cache.lines.length; i++) {
247
+ const line = cache.lines[i];
248
+ for (let j = 0; j < line.paragraphs.length; j++) if (inputIndex++, cInfo === line.paragraphs[j]) return inputIndex;
249
+ }
250
+ return -1;
251
+ }
252
+ getColumnByIndex(cache, index) {
253
+ let inputIndex = -1;
254
+ for (let i = 0; i < cache.lines.length; i++) {
255
+ const lineInfo = cache.lines[i];
256
+ for (let j = 0; j < lineInfo.paragraphs.length; j++) {
257
+ const columnInfo = lineInfo.paragraphs[j];
258
+ if (inputIndex++, inputIndex === index) return {
259
+ lineInfo: lineInfo,
260
+ columnInfo: columnInfo
261
+ };
262
+ }
263
+ }
264
+ return null;
265
+ }
266
+ setCursorAndTextArea(x, y1, y2, rt) {
267
+ this.editLine.setAttributes({
268
+ points: [ {
269
+ x: x,
270
+ y: y1
271
+ }, {
272
+ x: x,
273
+ y: y2
274
+ } ]
275
+ });
276
+ const out = {
277
+ x: 0,
278
+ y: 0
279
+ };
280
+ rt.globalTransMatrix.getInverse().transformPoint({
281
+ x: x,
282
+ y: y1
283
+ }, out);
284
+ const {left: left, top: top} = this.pluginService.stage.window.getBoundingClientRect();
285
+ out.x += left, out.y += top, this.editModule.moveTo(out.x, out.y, rt, this.curCursorIdx, this.selectionStartCursorIdx);
286
+ }
287
+ setCursor(x, y1, y2) {
288
+ this.editLine.setAttributes({
289
+ points: [ {
290
+ x: x,
291
+ y: y1
292
+ }, {
293
+ x: x,
294
+ y: y2
295
+ } ]
296
+ });
297
+ }
298
+ applyUpdate() {
299
+ this.pluginService.stage.renderNextFrame();
300
+ }
301
+ deFocus(e) {
302
+ e.target.detachShadow(), this.currRt = null, this.editLine && (this.editLine.parent.removeChild(this.editLine),
303
+ this.editLine.release(), this.editLine = null, this.editBg.parent.removeChild(this.editBg),
304
+ this.editBg.release(), this.editBg = null);
305
+ }
306
+ splitText(text) {
307
+ return Array.from(text);
308
+ }
309
+ tryUpdateRichtext(richtext) {
310
+ if (!richtext.getFrameCache().lines.every((line => line.paragraphs.every((item => !(item.text && isString(item.text) && this.splitText(item.text).length > 1)))))) {
311
+ const tc = [];
312
+ richtext.attribute.textConfig.forEach((item => {
313
+ const textList = this.splitText(item.text.toString());
314
+ if (isString(item.text) && textList.length > 1) for (let i = 0; i < textList.length; i++) {
315
+ const t = textList[i];
316
+ tc.push(Object.assign(Object.assign({}, item), {
317
+ text: t
318
+ }));
319
+ } else tc.push(item);
320
+ })), richtext.setAttributes({
321
+ textConfig: tc
322
+ }), richtext.doUpdateFrameCache(tc);
323
+ }
324
+ }
325
+ onSelect() {}
326
+ deactivate(context) {
327
+ context.stage.off("pointermove", this.handleMove), context.stage.off("pointerdown", this.handlePointerDown),
328
+ context.stage.off("pointerup", this.handlePointerUp), context.stage.off("pointerleave", this.handlePointerUp);
329
+ }
330
+ release() {
331
+ this.editModule.release();
332
+ }
333
+ }
334
+ //# sourceMappingURL=richtext-edit-plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/plugins/builtin-plugin/richtext-edit-plugin.ts"],"names":[],"mappings":"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","file":"richtext-edit-plugin.js","sourcesContent":["import type { IPointLike } from '@visactor/vutils';\nimport { isObject, isString, merge } from '@visactor/vutils';\nimport { Generator } from '../../common/generator';\nimport { createGroup, createLine, createRect } from '../../graphic';\nimport type {\n IGroup,\n ILine,\n IPlugin,\n IPluginService,\n IRect,\n IRichText,\n IRichTextCharacter,\n IRichTextFrame,\n IRichTextIcon,\n IRichTextLine,\n IRichTextParagraph,\n IRichTextParagraphCharacter\n} from '../../interface';\nimport { EditModule, findCursorIndexIgnoreLinebreak } from './edit-module';\n\ntype UpdateType = 'input' | 'change' | 'onfocus' | 'defocus' | 'selection' | 'dispatch';\n\nclass Selection {\n cacheSelectionStartCursorIdx: number;\n cacheCurCursorIdx: number;\n selectionStartCursorIdx: number;\n curCursorIdx: number;\n rt: IRichText;\n\n constructor(\n cacheSelectionStartCursorIdx: number,\n cacheCurCursorIdx: number,\n selectionStartCursorIdx: number,\n curCursorIdx: number,\n rt: IRichText\n ) {\n this.curCursorIdx = curCursorIdx;\n this.selectionStartCursorIdx = selectionStartCursorIdx;\n this.cacheCurCursorIdx = cacheCurCursorIdx;\n this.cacheSelectionStartCursorIdx = cacheSelectionStartCursorIdx;\n this.rt = rt;\n }\n\n hasFormat(key: string): boolean {\n return this.getFormat(key) != null;\n }\n getFormat(key: string): any {\n if (!this.rt) {\n return null;\n }\n const config = this.rt.attribute.textConfig;\n const val: any = config[this.selectionStartCursorIdx + 1][key];\n if (val == null) {\n return null;\n }\n for (let i = this.selectionStartCursorIdx + 2; i <= this.curCursorIdx; i++) {\n const item = config[i];\n if (val === item[key]) {\n continue;\n }\n return null;\n }\n return val;\n }\n\n getAllFormat(key: string): any {\n if (!this.rt) {\n return [];\n }\n const config = this.rt.attribute.textConfig;\n const val: any = config[this.selectionStartCursorIdx + 1][key];\n const set = new Set();\n set.add(val);\n for (let i = this.selectionStartCursorIdx + 2; i <= this.curCursorIdx; i++) {\n const item = config[i];\n set.add(item[key]);\n }\n const list = Array.from(set.values());\n return list;\n }\n}\n\nexport const FORMAT_TEXT_COMMAND = 'FORMAT_TEXT_COMMAND';\nexport const FORMAT_ELEMENT_COMMAND = 'FORMAT_ELEMENT_COMMAND';\nexport class RichTextEditPlugin implements IPlugin {\n name: 'RichTextEditPlugin' = 'RichTextEditPlugin';\n activeEvent: 'onRegister' = 'onRegister';\n pluginService: IPluginService;\n _uid: number = Generator.GenAutoIncrementId();\n key: string = this.name + this._uid;\n editing: boolean = false;\n editLine: ILine;\n editBg: IGroup;\n pointerDown: boolean = false;\n // 用于selection中保存上一次click时候的位置\n lastPoint?: IPointLike;\n editModule: EditModule;\n currRt: IRichText;\n\n // 当前的cursor信息\n curCursorIdx: number;\n selectionStartCursorIdx: number;\n\n commandCbs: Map<string, Array<(payload: any, p: RichTextEditPlugin) => void>>;\n updateCbs: Array<(type: UpdateType, p: RichTextEditPlugin) => void>;\n\n constructor() {\n this.commandCbs = new Map();\n this.commandCbs.set(FORMAT_TEXT_COMMAND, [this.formatTextCommandCb]);\n this.updateCbs = [];\n }\n\n getSelection() {\n if (\n this.selectionStartCursorIdx &&\n this.curCursorIdx &&\n this.selectionStartCursorIdx !== this.curCursorIdx &&\n this.currRt\n ) {\n return new Selection(\n this.selectionStartCursorIdx,\n this.curCursorIdx,\n findCursorIndexIgnoreLinebreak(this.currRt.attribute.textConfig, this.selectionStartCursorIdx),\n findCursorIndexIgnoreLinebreak(this.currRt.attribute.textConfig, this.curCursorIdx),\n this.currRt\n );\n }\n return null;\n }\n\n /* command */\n formatTextCommandCb(payload: string, p: RichTextEditPlugin) {\n const rt = p.currRt;\n if (!rt) {\n return;\n }\n const selectionData = p.getSelection();\n if (!selectionData) {\n return;\n }\n const { selectionStartCursorIdx, curCursorIdx } = selectionData;\n const config = rt.attribute.textConfig.slice(selectionStartCursorIdx + 1, curCursorIdx + 1);\n if (payload === 'bold') {\n config.forEach((item: IRichTextParagraphCharacter) => (item.fontWeight = 'bold'));\n } else if (payload === 'italic') {\n config.forEach((item: IRichTextParagraphCharacter) => (item.fontStyle = 'italic'));\n } else if (payload === 'underline') {\n config.forEach((item: IRichTextParagraphCharacter) => (item.underline = true));\n } else if (payload === 'lineThrough') {\n config.forEach((item: IRichTextParagraphCharacter) => (item.lineThrough = true));\n } else if (isObject(payload)) {\n config.forEach((item: IRichTextParagraphCharacter) => merge(item, payload));\n }\n rt.setAttributes(rt.attribute);\n }\n\n dispatchCommand(command: string, payload: any) {\n const cbs = this.commandCbs.get(command);\n cbs && cbs.forEach(cb => cb(payload, this));\n this.updateCbs.forEach(cb => cb('dispatch', this));\n }\n\n registerCommand(command: string, cb: (payload: any, p: RichTextEditPlugin) => void) {\n const cbs: Array<(payload: any, p: RichTextEditPlugin) => void> = this.commandCbs.get(command) || [];\n cbs.push(cb);\n }\n\n registerUpdateListener(cb: (type: UpdateType, p: RichTextEditPlugin) => void) {\n const cbs = this.updateCbs || [];\n cbs.push(cb);\n }\n\n activate(context: IPluginService): void {\n this.pluginService = context;\n this.editModule = new EditModule();\n // context.stage.on('click', this.handleClick);\n context.stage.on('pointermove', this.handleMove);\n context.stage.on('pointerdown', this.handlePointerDown);\n context.stage.on('pointerup', this.handlePointerUp);\n context.stage.on('pointerleave', this.handlePointerUp);\n\n this.editModule.onInput(this.handleInput);\n this.editModule.onChange(this.handleChange);\n }\n\n handleInput = (text: string, isComposing: boolean, cursorIdx: number, rt: IRichText, orient: 'left' | 'right') => {\n // 修改cursor的位置,但并不同步,因为这可能是临时的\n const p = this.getPointByColumnIdx(cursorIdx, rt, orient);\n this.hideSelection();\n this.setCursor(p.x, p.y1, p.y2);\n this.updateCbs.forEach(cb => cb('input', this));\n };\n handleChange = (text: string, isComposing: boolean, cursorIdx: number, rt: IRichText, orient: 'left' | 'right') => {\n // 修改cursor的位置,并同步到editModule\n const p = this.getPointByColumnIdx(cursorIdx, rt, orient);\n this.curCursorIdx = cursorIdx;\n this.selectionStartCursorIdx = cursorIdx;\n this.setCursorAndTextArea(p.x, p.y1, p.y2, rt);\n this.hideSelection();\n this.updateCbs.forEach(cb => cb('change', this));\n };\n\n handleMove = (e: PointerEvent) => {\n if (!this.isRichtext(e)) {\n return;\n }\n this.currRt = e.target as IRichText;\n this.handleEnter(e);\n (e.target as any).once('pointerleave', this.handleLeave);\n\n this.showSelection(e);\n };\n\n showSelection(e: PointerEvent) {\n const cache = (e.target as IRichText).getFrameCache();\n if (!(cache && this.editBg)) {\n return;\n }\n if (this.pointerDown) {\n let p0 = this.lastPoint;\n // 计算p1在字符中的位置\n let p1 = this.getEventPosition(e);\n let line1Info = this.getLineByPoint(cache, p1);\n const column1 = this.getColumnByLinePoint(line1Info, p1);\n const y1 = line1Info.top;\n const y2 = line1Info.top + line1Info.height;\n let x = column1.left + column1.width;\n let cursorIndex = this.getColumnIndex(cache, column1);\n if (p1.x < column1.left + column1.width / 2) {\n x = column1.left;\n cursorIndex -= 1;\n }\n p1.x = x;\n p1.y = (y1 + y2) / 2;\n let line0Info = this.getLineByPoint(cache, p0);\n if (p0.y > p1.y || (p0.y === p1.y && p0.x > p1.x)) {\n [p0, p1] = [p1, p0];\n [line1Info, line0Info] = [line0Info, line1Info];\n }\n\n this.editBg.removeAllChild();\n if (line0Info === line1Info) {\n const column0 = this.getColumnByLinePoint(line0Info, p0);\n this.editBg.setAttributes({\n x: p0.x,\n y: line0Info.top,\n width: p1.x - p0.x,\n height: column0.height,\n fill: '#336df4',\n fillOpacity: 0.2\n });\n } else {\n this.editBg.setAttributes({ x: 0, y: line0Info.top, width: 0, height: 0 });\n const startIdx = cache.lines.findIndex(item => item === line0Info);\n const endIdx = cache.lines.findIndex(item => item === line1Info);\n let y = 0;\n for (let i = startIdx; i <= endIdx; i++) {\n const line = cache.lines[i];\n if (i === startIdx) {\n const p = line.paragraphs[line.paragraphs.length - 1];\n this.editBg.add(\n createRect({\n x: p0.x,\n y,\n width: p.left + p.width - p0.x,\n height: line.height,\n fill: '#336df4',\n fillOpacity: 0.2\n })\n );\n } else if (i === endIdx) {\n const p = line.paragraphs[0];\n this.editBg.add(\n createRect({\n x: p.left,\n y,\n width: p1.x - p.left,\n height: line.height,\n fill: '#336df4',\n fillOpacity: 0.2\n })\n );\n } else {\n const p0 = line.paragraphs[0];\n const p1 = line.paragraphs[line.paragraphs.length - 1];\n this.editBg.add(\n createRect({\n x: p0.left,\n y,\n width: p1.left + p1.width - p0.left,\n height: line.height,\n fill: '#336df4',\n fillOpacity: 0.2\n })\n );\n }\n y += line.height;\n }\n }\n\n this.curCursorIdx = cursorIndex;\n this.setCursorAndTextArea(x, y1 + 2, y2 - 2, e.target as IRichText);\n\n this.applyUpdate();\n this.updateCbs.forEach(cb => cb('selection', this));\n }\n }\n\n hideSelection() {\n if (this.editBg) {\n this.editBg.removeAllChild();\n this.editBg.setAttributes({ fill: 'transparent' });\n }\n }\n\n handlePointerDown = (e: PointerEvent) => {\n if (this.editing) {\n this.onFocus(e);\n } else {\n this.deFocus(e);\n }\n this.applyUpdate();\n this.pointerDown = true;\n this.updateCbs.forEach(cb => cb(this.editing ? 'onfocus' : 'defocus', this));\n };\n handlePointerUp = (e: PointerEvent) => {\n this.pointerDown = false;\n };\n\n handleEnter = (e: PointerEvent) => {\n this.editing = true;\n this.pluginService.stage.setCursor('text');\n };\n\n handleLeave = (e: PointerEvent) => {\n this.editing = false;\n this.pluginService.stage.setCursor('default');\n };\n\n isRichtext(e: PointerEvent) {\n return !!(e.target && (e.target as any).type === 'richtext' && (e.target as any).attribute.editable);\n }\n\n protected getEventPosition(e: PointerEvent): IPointLike {\n const p = this.pluginService.stage.eventPointTransform(e);\n\n const p1 = { x: 0, y: 0 };\n (e.target as IRichText).globalTransMatrix.transformPoint(p, p1);\n return p1;\n }\n\n protected getLineByPoint(cache: IRichTextFrame, p1: IPointLike): IRichTextLine {\n let lineInfo = cache.lines[0];\n for (let i = 0; i < cache.lines.length; i++) {\n if (lineInfo.top <= p1.y && lineInfo.top + lineInfo.height >= p1.y) {\n break;\n }\n lineInfo = cache.lines[i + 1];\n }\n\n return lineInfo;\n }\n protected getColumnByLinePoint(lineInfo: IRichTextLine, p1: IPointLike): IRichTextParagraph | IRichTextIcon {\n let columnInfo = lineInfo.paragraphs[0];\n for (let i = 0; i < lineInfo.paragraphs.length; i++) {\n if (columnInfo.left <= p1.x && columnInfo.left + columnInfo.width >= p1.x) {\n break;\n }\n columnInfo = lineInfo.paragraphs[i];\n }\n\n return columnInfo;\n }\n\n onFocus(e: PointerEvent) {\n this.deFocus(e);\n\n // 添加shadowGraphic\n const target = e.target as IRichText;\n this.tryUpdateRichtext(target);\n const shadowRoot = target.attachShadow();\n shadowRoot.setAttributes({ shadowRootIdx: -1 });\n const cache = target.getFrameCache();\n if (!cache) {\n return;\n }\n if (!this.editLine) {\n const line = createLine({ x: 0, y: 0, lineWidth: 1, stroke: 'black' });\n line\n .animate()\n .to({ opacity: 1 }, 10, 'linear')\n .wait(700)\n .to({ opacity: 0 }, 10, 'linear')\n .wait(700)\n .loop(Infinity);\n this.editLine = line;\n\n const g = createGroup({ x: 0, y: 0, width: 0, height: 0 });\n this.editBg = g;\n shadowRoot.add(this.editLine);\n shadowRoot.add(this.editBg);\n }\n\n const p1 = this.getEventPosition(e);\n\n const lineInfo = this.getLineByPoint(cache, p1);\n\n if (lineInfo) {\n const columnInfo = this.getColumnByLinePoint(lineInfo, p1);\n if (!columnInfo) {\n return;\n }\n\n let y1 = lineInfo.top;\n let y2 = lineInfo.top + lineInfo.height;\n let x = columnInfo.left + columnInfo.width;\n y1 += 2;\n y2 -= 2;\n let cursorIndex = this.getColumnIndex(cache, columnInfo);\n if (p1.x < columnInfo.left + columnInfo.width / 2) {\n x = columnInfo.left;\n cursorIndex -= 1;\n }\n\n this.lastPoint = { x, y: (y1 + y2) / 2 };\n\n this.curCursorIdx = cursorIndex;\n this.selectionStartCursorIdx = cursorIndex;\n this.setCursorAndTextArea(x, y1, y2, target);\n }\n }\n\n protected getPointByColumnIdx(idx: number, rt: IRichText, orient: 'left' | 'right') {\n const cache = rt.getFrameCache();\n const { lineInfo, columnInfo } = this.getColumnByIndex(cache, idx);\n let y1 = lineInfo.top;\n let y2 = lineInfo.top + lineInfo.height;\n const x = columnInfo.left + (orient === 'left' ? 0 : columnInfo.width);\n y1 += 2;\n y2 -= 2;\n\n return { x, y1, y2 };\n }\n\n protected getColumnIndex(cache: IRichTextFrame, cInfo: IRichTextParagraph | IRichTextIcon) {\n // TODO 认为都是单个字符拆分的\n let inputIndex = -1;\n for (let i = 0; i < cache.lines.length; i++) {\n const line = cache.lines[i];\n for (let j = 0; j < line.paragraphs.length; j++) {\n inputIndex++;\n if (cInfo === line.paragraphs[j]) {\n return inputIndex;\n }\n }\n }\n return -1;\n }\n protected getColumnByIndex(\n cache: IRichTextFrame,\n index: number\n ): {\n lineInfo: IRichTextLine;\n columnInfo: IRichTextParagraph | IRichTextIcon;\n } | null {\n // TODO 认为都是单个字符拆分的\n let inputIndex = -1;\n for (let i = 0; i < cache.lines.length; i++) {\n const lineInfo = cache.lines[i];\n for (let j = 0; j < lineInfo.paragraphs.length; j++) {\n const columnInfo = lineInfo.paragraphs[j];\n inputIndex++;\n if (inputIndex === index) {\n return {\n lineInfo,\n columnInfo\n };\n }\n }\n }\n return null;\n }\n\n protected setCursorAndTextArea(x: number, y1: number, y2: number, rt: IRichText) {\n this.editLine.setAttributes({\n points: [\n { x, y: y1 },\n { x, y: y2 }\n ]\n });\n const out = { x: 0, y: 0 };\n rt.globalTransMatrix.getInverse().transformPoint({ x, y: y1 }, out);\n // TODO 考虑stage变换\n const { left, top } = this.pluginService.stage.window.getBoundingClientRect();\n out.x += left;\n out.y += top;\n\n this.editModule.moveTo(out.x, out.y, rt, this.curCursorIdx, this.selectionStartCursorIdx);\n }\n protected setCursor(x: number, y1: number, y2: number) {\n this.editLine.setAttributes({\n points: [\n { x, y: y1 },\n { x, y: y2 }\n ]\n });\n }\n\n applyUpdate() {\n this.pluginService.stage.renderNextFrame();\n }\n deFocus(e: PointerEvent) {\n const target = e.target as IRichText;\n target.detachShadow();\n this.currRt = null;\n if (this.editLine) {\n this.editLine.parent.removeChild(this.editLine);\n this.editLine.release();\n this.editLine = null;\n\n this.editBg.parent.removeChild(this.editBg);\n this.editBg.release();\n this.editBg = null;\n }\n }\n\n splitText(text: string) {\n // 😁这种emoji长度算两个,所以得处理一下\n return Array.from(text);\n }\n\n tryUpdateRichtext(richtext: IRichText) {\n const cache = richtext.getFrameCache();\n if (\n !cache.lines.every(line =>\n line.paragraphs.every(item => !(item.text && isString(item.text) && this.splitText(item.text).length > 1))\n )\n ) {\n const tc: IRichTextCharacter[] = [];\n richtext.attribute.textConfig.forEach((item: IRichTextParagraphCharacter) => {\n const textList = this.splitText(item.text.toString());\n if (isString(item.text) && textList.length > 1) {\n // 拆分\n for (let i = 0; i < textList.length; i++) {\n const t = textList[i];\n tc.push({ ...item, text: t });\n }\n } else {\n tc.push(item);\n }\n });\n richtext.setAttributes({ textConfig: tc });\n richtext.doUpdateFrameCache(tc);\n }\n }\n\n onSelect() {\n return;\n }\n\n deactivate(context: IPluginService): void {\n // context.stage.off('pointerdown', this.handleClick);\n context.stage.off('pointermove', this.handleMove);\n context.stage.off('pointerdown', this.handlePointerDown);\n context.stage.off('pointerup', this.handlePointerUp);\n context.stage.off('pointerleave', this.handlePointerUp);\n }\n\n release() {\n this.editModule.release();\n }\n}\n"]}
@@ -10,7 +10,7 @@ var __decorate = this && this.__decorate || function(decorators, target, key, de
10
10
  };
11
11
  };
12
12
 
13
- import { abs, acos, atan2, cos, epsilon, min, pi, sin, sqrt, pi2, isBoolean } from "@visactor/vutils";
13
+ import { abs, atan2, cos, epsilon, min, sin, pi2, isBoolean } from "@visactor/vutils";
14
14
 
15
15
  import { inject, injectable, named } from "../../../common/inversify-lite";
16
16
 
@@ -20,7 +20,9 @@ import { parseStroke } from "../../../common/utils";
20
20
 
21
21
  import { ContributionProvider } from "../../../common/contribution-provider";
22
22
 
23
- import { cornerTangents, drawArcPath, fillVisible, intersect } from "./utils";
23
+ import { calculateArcCornerRadius } from "../render/utils";
24
+
25
+ import { cornerTangents, drawArcPath, fillVisible } from "./utils";
24
26
 
25
27
  import { getConicGradientAt } from "../../../canvas/conical-gradient";
26
28
 
@@ -42,25 +44,14 @@ let DefaultCanvasArcRender = class extends BaseRender {
42
44
  const capAngle = _ea - _sa, data = arc.getParsedAngle(), startAngle = data.startAngle;
43
45
  let endAngle = data.endAngle;
44
46
  endAngle = _ea;
45
- const deltaAngle = abs(endAngle - startAngle), clockwise = endAngle > startAngle;
47
+ abs(endAngle - startAngle);
48
+ const clockwise = endAngle > startAngle;
46
49
  let collapsedToLine = !1;
47
50
  if (outerRadius < innerRadius) {
48
51
  const temp = outerRadius;
49
52
  outerRadius = innerRadius, innerRadius = temp;
50
53
  }
51
- const cornerRadius = arc.getParsedCornerRadius(), {outerDeltaAngle: outerDeltaAngle, innerDeltaAngle: innerDeltaAngle, outerStartAngle: outerStartAngle, outerEndAngle: outerEndAngle, innerEndAngle: innerEndAngle, innerStartAngle: innerStartAngle} = arc.getParsePadAngle(startAngle, endAngle), outerCornerRadiusStart = cornerRadius, outerCornerRadiusEnd = cornerRadius, innerCornerRadiusEnd = cornerRadius, innerCornerRadiusStart = cornerRadius, maxOuterCornerRadius = Math.max(outerCornerRadiusEnd, outerCornerRadiusStart), maxInnerCornerRadius = Math.max(innerCornerRadiusEnd, innerCornerRadiusStart);
52
- let limitedOcr = maxOuterCornerRadius, limitedIcr = maxInnerCornerRadius;
53
- const xors = outerRadius * cos(outerStartAngle), yors = outerRadius * sin(outerStartAngle), xire = innerRadius * cos(innerEndAngle), yire = innerRadius * sin(innerEndAngle);
54
- let xore, yore, xirs, yirs;
55
- if ((maxInnerCornerRadius > epsilon || maxOuterCornerRadius > epsilon) && (xore = outerRadius * cos(outerEndAngle),
56
- yore = outerRadius * sin(outerEndAngle), xirs = innerRadius * cos(innerStartAngle),
57
- yirs = innerRadius * sin(innerStartAngle), deltaAngle < pi)) {
58
- const oc = intersect(xors, yors, xirs, yirs, xore, yore, xire, yire);
59
- if (oc) {
60
- const ax = xors - oc[0], ay = yors - oc[1], bx = xore - oc[0], by = yore - oc[1], kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2), lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]);
61
- limitedIcr = min(maxInnerCornerRadius, (innerRadius - lc) / (kc - 1)), limitedOcr = min(maxOuterCornerRadius, (outerRadius - lc) / (kc + 1));
62
- }
63
- }
54
+ const {outerDeltaAngle: outerDeltaAngle, xors: xors, yors: yors, xirs: xirs, yirs: yirs, limitedOcr: limitedOcr, outerCornerRadiusStart: outerCornerRadiusStart, outerCornerRadiusEnd: outerCornerRadiusEnd, maxOuterCornerRadius: maxOuterCornerRadius, xore: xore, yore: yore, xire: xire, yire: yire, limitedIcr: limitedIcr, innerDeltaAngle: innerDeltaAngle, innerStartAngle: innerStartAngle, innerCornerRadiusStart: innerCornerRadiusStart, innerCornerRadiusEnd: innerCornerRadiusEnd, maxInnerCornerRadius: maxInnerCornerRadius} = calculateArcCornerRadius(arc, startAngle, endAngle, innerRadius, outerRadius);
64
55
  if (limitedOcr > epsilon) {
65
56
  const cornerRadiusStart = min(outerCornerRadiusStart, limitedOcr), cornerRadiusEnd = min(outerCornerRadiusEnd, limitedOcr), t0 = cornerTangents(xirs, yirs, xors, yors, outerRadius, cornerRadiusStart, Number(clockwise)), t1 = cornerTangents(xore, yore, xire, yire, outerRadius, cornerRadiusEnd, Number(clockwise));
66
57
  if (limitedOcr < maxOuterCornerRadius && cornerRadiusStart === cornerRadiusEnd) context.moveTo(cx + t0.cx + t0.x01, cy + t0.cy + t0.y01),