@logicflow/core 2.0.0-beta.1 → 2.0.0-beta.10

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 (469) hide show
  1. package/.turbo/turbo-build$colon$dev.log +2 -2
  2. package/.turbo/turbo-build.log +9 -9
  3. package/__tests__/bugs/1545-spec.test.ts +19 -15
  4. package/__tests__/util/edge.test.ts +57 -57
  5. package/dist/index.min.js +9 -3
  6. package/es/LogicFlow.d.ts +88 -40
  7. package/es/LogicFlow.js +38 -33
  8. package/es/LogicFlow.js.map +1 -1
  9. package/es/algorithm/edge.js.map +1 -1
  10. package/es/algorithm/index.d.ts +2 -0
  11. package/es/algorithm/index.js +2 -0
  12. package/es/algorithm/index.js.map +1 -1
  13. package/es/algorithm/outline.d.ts +1 -1
  14. package/es/common/drag.d.ts +51 -0
  15. package/es/common/drag.js +145 -0
  16. package/es/common/drag.js.map +1 -0
  17. package/es/common/history.d.ts +28 -0
  18. package/es/common/history.js +92 -0
  19. package/es/common/history.js.map +1 -0
  20. package/es/common/index.d.ts +5 -0
  21. package/es/common/index.js +6 -0
  22. package/es/common/index.js.map +1 -0
  23. package/es/common/keyboard.d.ts +34 -0
  24. package/es/common/keyboard.js +80 -0
  25. package/es/common/keyboard.js.map +1 -0
  26. package/es/common/matrix.d.ts +30 -0
  27. package/es/common/matrix.js +155 -0
  28. package/es/common/matrix.js.map +1 -0
  29. package/es/common/vector.d.ts +23 -0
  30. package/es/common/vector.js +97 -0
  31. package/es/common/vector.js.map +1 -0
  32. package/es/constant/index.d.ts +39 -2
  33. package/es/constant/index.js +41 -1
  34. package/es/constant/index.js.map +1 -1
  35. package/es/event/eventArgs.d.ts +103 -25
  36. package/es/event/eventEmitter.d.ts +2 -2
  37. package/es/event/eventEmitter.js +0 -1
  38. package/es/event/eventEmitter.js.map +1 -1
  39. package/es/index.d.ts +6 -1
  40. package/es/index.js +6 -1
  41. package/es/index.js.map +1 -1
  42. package/es/keyboard/index.d.ts +1 -0
  43. package/es/keyboard/index.js +1 -0
  44. package/es/keyboard/index.js.map +1 -1
  45. package/es/keyboard/shortcut.d.ts +8 -0
  46. package/es/keyboard/shortcut.js +70 -8
  47. package/es/keyboard/shortcut.js.map +1 -1
  48. package/es/model/BaseModel.d.ts +16 -7
  49. package/es/model/EditConfigModel.d.ts +97 -36
  50. package/es/model/EditConfigModel.js +169 -82
  51. package/es/model/EditConfigModel.js.map +1 -1
  52. package/es/model/GraphModel.d.ts +36 -14
  53. package/es/model/GraphModel.js +60 -10
  54. package/es/model/GraphModel.js.map +1 -1
  55. package/es/model/SnaplineModel.d.ts +2 -0
  56. package/es/model/TransformModel.js +1 -1
  57. package/es/model/TransformModel.js.map +1 -1
  58. package/es/model/edge/BaseEdgeModel.d.ts +21 -17
  59. package/es/model/edge/BaseEdgeModel.js +64 -42
  60. package/es/model/edge/BaseEdgeModel.js.map +1 -1
  61. package/es/model/edge/BezierEdgeModel.d.ts +5 -3
  62. package/es/model/edge/BezierEdgeModel.js +7 -3
  63. package/es/model/edge/BezierEdgeModel.js.map +1 -1
  64. package/es/model/edge/LineEdgeModel.d.ts +2 -0
  65. package/es/model/edge/LineEdgeModel.js +2 -1
  66. package/es/model/edge/LineEdgeModel.js.map +1 -1
  67. package/es/model/edge/PolylineEdgeModel.d.ts +5 -3
  68. package/es/model/edge/PolylineEdgeModel.js +22 -15
  69. package/es/model/edge/PolylineEdgeModel.js.map +1 -1
  70. package/es/model/node/BaseNodeModel.d.ts +42 -14
  71. package/es/model/node/BaseNodeModel.js +62 -48
  72. package/es/model/node/BaseNodeModel.js.map +1 -1
  73. package/es/model/node/CircleNodeModel.d.ts +4 -3
  74. package/es/model/node/CircleNodeModel.js +4 -7
  75. package/es/model/node/CircleNodeModel.js.map +1 -1
  76. package/es/model/node/DiamondNodeModel.d.ts +5 -4
  77. package/es/model/node/DiamondNodeModel.js +4 -6
  78. package/es/model/node/DiamondNodeModel.js.map +1 -1
  79. package/es/model/node/EllipseNodeModel.d.ts +5 -4
  80. package/es/model/node/EllipseNodeModel.js +4 -6
  81. package/es/model/node/EllipseNodeModel.js.map +1 -1
  82. package/es/model/node/HtmlNodeModel.d.ts +4 -5
  83. package/es/model/node/HtmlNodeModel.js +2 -12
  84. package/es/model/node/HtmlNodeModel.js.map +1 -1
  85. package/es/model/node/PolygonNodeModel.d.ts +5 -4
  86. package/es/model/node/PolygonNodeModel.js +4 -7
  87. package/es/model/node/PolygonNodeModel.js.map +1 -1
  88. package/es/model/node/RectNodeModel.d.ts +7 -5
  89. package/es/model/node/RectNodeModel.js +10 -7
  90. package/es/model/node/RectNodeModel.js.map +1 -1
  91. package/es/model/node/TextNodeModel.d.ts +17 -9
  92. package/es/model/node/TextNodeModel.js +2 -1
  93. package/es/model/node/TextNodeModel.js.map +1 -1
  94. package/es/options.d.ts +6 -3
  95. package/es/options.js +2 -11
  96. package/es/options.js.map +1 -1
  97. package/es/tool/MultipleSelectTool.d.ts +1 -1
  98. package/es/tool/MultipleSelectTool.js +5 -5
  99. package/es/tool/MultipleSelectTool.js.map +1 -1
  100. package/es/tool/TextEditTool.d.ts +3 -3
  101. package/es/tool/TextEditTool.js +2 -2
  102. package/es/tool/TextEditTool.js.map +1 -1
  103. package/es/tool/index.d.ts +24 -2
  104. package/es/tool/index.js +82 -2
  105. package/es/tool/index.js.map +1 -1
  106. package/es/util/drag.d.ts +5 -5
  107. package/es/util/drag.js +3 -1
  108. package/es/util/drag.js.map +1 -1
  109. package/es/util/edge.d.ts +9 -2
  110. package/es/util/edge.js +23 -12
  111. package/es/util/edge.js.map +1 -1
  112. package/es/util/index.d.ts +1 -0
  113. package/es/util/index.js +1 -0
  114. package/es/util/index.js.map +1 -1
  115. package/es/util/node.d.ts +8 -7
  116. package/es/util/node.js +26 -7
  117. package/es/util/node.js.map +1 -1
  118. package/es/util/resize.d.ts +32 -0
  119. package/es/util/resize.js +197 -0
  120. package/es/util/resize.js.map +1 -0
  121. package/es/view/Anchor.d.ts +6 -7
  122. package/es/view/Anchor.js +6 -3
  123. package/es/view/Anchor.js.map +1 -1
  124. package/es/view/Control.d.ts +1 -1
  125. package/es/view/Control.js +88 -39
  126. package/es/view/Control.js.map +1 -1
  127. package/es/view/Graph.d.ts +5 -1
  128. package/es/view/Graph.js +43 -3
  129. package/es/view/Graph.js.map +1 -1
  130. package/es/view/Rotate.js +2 -1
  131. package/es/view/Rotate.js.map +1 -1
  132. package/es/view/behavior/index.d.ts +2 -0
  133. package/es/view/behavior/index.js +3 -0
  134. package/es/view/behavior/index.js.map +1 -0
  135. package/es/view/behavior/snapline.d.ts +3 -0
  136. package/es/{tool → view/behavior}/snapline.js +0 -1
  137. package/es/view/behavior/snapline.js.map +1 -0
  138. package/es/view/edge/AdjustPoint.js +12 -23
  139. package/es/view/edge/AdjustPoint.js.map +1 -1
  140. package/es/view/edge/BaseEdge.d.ts +2 -2
  141. package/es/view/edge/BaseEdge.js +30 -22
  142. package/es/view/edge/BaseEdge.js.map +1 -1
  143. package/es/view/node/BaseNode.d.ts +4 -4
  144. package/es/view/node/BaseNode.js +33 -24
  145. package/es/view/node/BaseNode.js.map +1 -1
  146. package/es/view/node/CircleNode.d.ts +1 -1
  147. package/es/view/node/CircleNode.js.map +1 -1
  148. package/es/view/node/DiamondNode.d.ts +1 -1
  149. package/es/view/node/DiamondNode.js.map +1 -1
  150. package/es/view/node/EllipseNode.d.ts +1 -1
  151. package/es/view/node/EllipseNode.js.map +1 -1
  152. package/es/view/node/HtmlNode.d.ts +1 -1
  153. package/es/view/node/HtmlNode.js +2 -2
  154. package/es/view/node/HtmlNode.js.map +1 -1
  155. package/es/view/node/PolygonNode.d.ts +1 -1
  156. package/es/view/node/PolygonNode.js.map +1 -1
  157. package/es/view/node/RectNode.d.ts +1 -1
  158. package/es/view/node/RectNode.js.map +1 -1
  159. package/es/view/node/TextNode.d.ts +1 -1
  160. package/es/view/node/TextNode.js +1 -1
  161. package/es/view/node/TextNode.js.map +1 -1
  162. package/es/view/overlay/CanvasOverlay.js +5 -4
  163. package/es/view/overlay/CanvasOverlay.js.map +1 -1
  164. package/es/view/overlay/ToolOverlay.d.ts +1 -1
  165. package/es/view/overlay/ToolOverlay.js +1 -1
  166. package/es/view/overlay/ToolOverlay.js.map +1 -1
  167. package/es/view/shape/Circle.d.ts +9 -1
  168. package/es/view/shape/Circle.js +5 -5
  169. package/es/view/shape/Circle.js.map +1 -1
  170. package/es/view/shape/Ellipse.d.ts +10 -1
  171. package/es/view/shape/Ellipse.js +5 -5
  172. package/es/view/shape/Ellipse.js.map +1 -1
  173. package/es/view/shape/Line.d.ts +14 -1
  174. package/es/view/shape/Line.js +5 -7
  175. package/es/view/shape/Line.js.map +1 -1
  176. package/es/view/shape/Path.d.ts +3 -2
  177. package/es/view/shape/Path.js +3 -3
  178. package/es/view/shape/Path.js.map +1 -1
  179. package/es/view/shape/Polygon.d.ts +5 -3
  180. package/es/view/shape/Polygon.js +6 -6
  181. package/es/view/shape/Polygon.js.map +1 -1
  182. package/es/view/shape/Polyline.d.ts +7 -1
  183. package/es/view/shape/Polyline.js +8 -6
  184. package/es/view/shape/Polyline.js.map +1 -1
  185. package/es/view/shape/Rect.d.ts +11 -13
  186. package/es/view/shape/Rect.js +6 -9
  187. package/es/view/shape/Rect.js.map +1 -1
  188. package/es/view/shape/Text.d.ts +19 -1
  189. package/es/view/shape/Text.js +28 -21
  190. package/es/view/shape/Text.js.map +1 -1
  191. package/es/view/text/BaseText.d.ts +12 -15
  192. package/es/view/text/BaseText.js +43 -29
  193. package/es/view/text/BaseText.js.map +1 -1
  194. package/es/view/text/LineText.d.ts +19 -7
  195. package/es/view/text/LineText.js +62 -54
  196. package/es/view/text/LineText.js.map +1 -1
  197. package/lib/LogicFlow.d.ts +88 -40
  198. package/lib/LogicFlow.js +40 -35
  199. package/lib/LogicFlow.js.map +1 -1
  200. package/lib/algorithm/edge.js.map +1 -1
  201. package/lib/algorithm/index.d.ts +2 -0
  202. package/lib/algorithm/index.js +17 -1
  203. package/lib/algorithm/index.js.map +1 -1
  204. package/lib/algorithm/outline.d.ts +1 -1
  205. package/lib/common/drag.d.ts +51 -0
  206. package/lib/common/drag.js +148 -0
  207. package/lib/common/drag.js.map +1 -0
  208. package/lib/common/history.d.ts +28 -0
  209. package/lib/common/history.js +95 -0
  210. package/lib/common/history.js.map +1 -0
  211. package/lib/common/index.d.ts +5 -0
  212. package/lib/common/index.js +22 -0
  213. package/lib/common/index.js.map +1 -0
  214. package/lib/common/keyboard.d.ts +34 -0
  215. package/lib/common/keyboard.js +86 -0
  216. package/lib/common/keyboard.js.map +1 -0
  217. package/lib/common/matrix.d.ts +30 -0
  218. package/lib/common/matrix.js +158 -0
  219. package/lib/common/matrix.js.map +1 -0
  220. package/lib/common/vector.d.ts +23 -0
  221. package/lib/common/vector.js +101 -0
  222. package/lib/common/vector.js.map +1 -0
  223. package/lib/constant/index.d.ts +39 -2
  224. package/lib/constant/index.js +42 -2
  225. package/lib/constant/index.js.map +1 -1
  226. package/lib/event/eventArgs.d.ts +103 -25
  227. package/lib/event/eventEmitter.d.ts +2 -2
  228. package/lib/event/eventEmitter.js +0 -1
  229. package/lib/event/eventEmitter.js.map +1 -1
  230. package/lib/index.d.ts +6 -1
  231. package/lib/index.js +7 -2
  232. package/lib/index.js.map +1 -1
  233. package/lib/keyboard/index.d.ts +1 -0
  234. package/lib/keyboard/index.js +15 -0
  235. package/lib/keyboard/index.js.map +1 -1
  236. package/lib/keyboard/shortcut.d.ts +8 -0
  237. package/lib/keyboard/shortcut.js +75 -9
  238. package/lib/keyboard/shortcut.js.map +1 -1
  239. package/lib/model/BaseModel.d.ts +16 -7
  240. package/lib/model/EditConfigModel.d.ts +97 -36
  241. package/lib/model/EditConfigModel.js +168 -81
  242. package/lib/model/EditConfigModel.js.map +1 -1
  243. package/lib/model/GraphModel.d.ts +36 -14
  244. package/lib/model/GraphModel.js +59 -9
  245. package/lib/model/GraphModel.js.map +1 -1
  246. package/lib/model/SnaplineModel.d.ts +2 -0
  247. package/lib/model/TransformModel.js +1 -1
  248. package/lib/model/TransformModel.js.map +1 -1
  249. package/lib/model/edge/BaseEdgeModel.d.ts +21 -17
  250. package/lib/model/edge/BaseEdgeModel.js +61 -39
  251. package/lib/model/edge/BaseEdgeModel.js.map +1 -1
  252. package/lib/model/edge/BezierEdgeModel.d.ts +5 -3
  253. package/lib/model/edge/BezierEdgeModel.js +6 -2
  254. package/lib/model/edge/BezierEdgeModel.js.map +1 -1
  255. package/lib/model/edge/LineEdgeModel.d.ts +2 -0
  256. package/lib/model/edge/LineEdgeModel.js +2 -1
  257. package/lib/model/edge/LineEdgeModel.js.map +1 -1
  258. package/lib/model/edge/PolylineEdgeModel.d.ts +5 -3
  259. package/lib/model/edge/PolylineEdgeModel.js +21 -14
  260. package/lib/model/edge/PolylineEdgeModel.js.map +1 -1
  261. package/lib/model/node/BaseNodeModel.d.ts +42 -14
  262. package/lib/model/node/BaseNodeModel.js +60 -46
  263. package/lib/model/node/BaseNodeModel.js.map +1 -1
  264. package/lib/model/node/CircleNodeModel.d.ts +4 -3
  265. package/lib/model/node/CircleNodeModel.js +4 -7
  266. package/lib/model/node/CircleNodeModel.js.map +1 -1
  267. package/lib/model/node/DiamondNodeModel.d.ts +5 -4
  268. package/lib/model/node/DiamondNodeModel.js +4 -6
  269. package/lib/model/node/DiamondNodeModel.js.map +1 -1
  270. package/lib/model/node/EllipseNodeModel.d.ts +5 -4
  271. package/lib/model/node/EllipseNodeModel.js +4 -6
  272. package/lib/model/node/EllipseNodeModel.js.map +1 -1
  273. package/lib/model/node/HtmlNodeModel.d.ts +4 -5
  274. package/lib/model/node/HtmlNodeModel.js +2 -12
  275. package/lib/model/node/HtmlNodeModel.js.map +1 -1
  276. package/lib/model/node/PolygonNodeModel.d.ts +5 -4
  277. package/lib/model/node/PolygonNodeModel.js +4 -7
  278. package/lib/model/node/PolygonNodeModel.js.map +1 -1
  279. package/lib/model/node/RectNodeModel.d.ts +7 -5
  280. package/lib/model/node/RectNodeModel.js +10 -7
  281. package/lib/model/node/RectNodeModel.js.map +1 -1
  282. package/lib/model/node/TextNodeModel.d.ts +17 -9
  283. package/lib/model/node/TextNodeModel.js +2 -1
  284. package/lib/model/node/TextNodeModel.js.map +1 -1
  285. package/lib/options.d.ts +6 -3
  286. package/lib/options.js +2 -11
  287. package/lib/options.js.map +1 -1
  288. package/lib/tool/MultipleSelectTool.d.ts +1 -1
  289. package/lib/tool/MultipleSelectTool.js +5 -5
  290. package/lib/tool/MultipleSelectTool.js.map +1 -1
  291. package/lib/tool/TextEditTool.d.ts +3 -3
  292. package/lib/tool/TextEditTool.js +4 -4
  293. package/lib/tool/TextEditTool.js.map +1 -1
  294. package/lib/tool/index.d.ts +24 -2
  295. package/lib/tool/index.js +85 -15
  296. package/lib/tool/index.js.map +1 -1
  297. package/lib/util/drag.d.ts +5 -5
  298. package/lib/util/drag.js +3 -1
  299. package/lib/util/drag.js.map +1 -1
  300. package/lib/util/edge.d.ts +9 -2
  301. package/lib/util/edge.js +27 -15
  302. package/lib/util/edge.js.map +1 -1
  303. package/lib/util/index.d.ts +1 -0
  304. package/lib/util/index.js +1 -0
  305. package/lib/util/index.js.map +1 -1
  306. package/lib/util/node.d.ts +8 -7
  307. package/lib/util/node.js +28 -9
  308. package/lib/util/node.js.map +1 -1
  309. package/lib/util/resize.d.ts +32 -0
  310. package/lib/util/resize.js +204 -0
  311. package/lib/util/resize.js.map +1 -0
  312. package/lib/view/Anchor.d.ts +6 -7
  313. package/lib/view/Anchor.js +5 -2
  314. package/lib/view/Anchor.js.map +1 -1
  315. package/lib/view/Control.d.ts +1 -1
  316. package/lib/view/Control.js +87 -38
  317. package/lib/view/Control.js.map +1 -1
  318. package/lib/view/Graph.d.ts +5 -1
  319. package/lib/view/Graph.js +42 -2
  320. package/lib/view/Graph.js.map +1 -1
  321. package/lib/view/Rotate.js +2 -1
  322. package/lib/view/Rotate.js.map +1 -1
  323. package/lib/view/behavior/index.d.ts +2 -0
  324. package/lib/view/behavior/index.js +19 -0
  325. package/lib/view/behavior/index.js.map +1 -0
  326. package/lib/view/behavior/snapline.d.ts +3 -0
  327. package/lib/{tool → view/behavior}/snapline.js +0 -1
  328. package/lib/view/behavior/snapline.js.map +1 -0
  329. package/lib/view/edge/AdjustPoint.js +11 -22
  330. package/lib/view/edge/AdjustPoint.js.map +1 -1
  331. package/lib/view/edge/BaseEdge.d.ts +2 -2
  332. package/lib/view/edge/BaseEdge.js +29 -21
  333. package/lib/view/edge/BaseEdge.js.map +1 -1
  334. package/lib/view/node/BaseNode.d.ts +4 -4
  335. package/lib/view/node/BaseNode.js +32 -23
  336. package/lib/view/node/BaseNode.js.map +1 -1
  337. package/lib/view/node/CircleNode.d.ts +1 -1
  338. package/lib/view/node/CircleNode.js.map +1 -1
  339. package/lib/view/node/DiamondNode.d.ts +1 -1
  340. package/lib/view/node/DiamondNode.js.map +1 -1
  341. package/lib/view/node/EllipseNode.d.ts +1 -1
  342. package/lib/view/node/EllipseNode.js.map +1 -1
  343. package/lib/view/node/HtmlNode.d.ts +1 -1
  344. package/lib/view/node/HtmlNode.js +2 -2
  345. package/lib/view/node/HtmlNode.js.map +1 -1
  346. package/lib/view/node/PolygonNode.d.ts +1 -1
  347. package/lib/view/node/PolygonNode.js.map +1 -1
  348. package/lib/view/node/RectNode.d.ts +1 -1
  349. package/lib/view/node/RectNode.js.map +1 -1
  350. package/lib/view/node/TextNode.d.ts +1 -1
  351. package/lib/view/node/TextNode.js +1 -1
  352. package/lib/view/node/TextNode.js.map +1 -1
  353. package/lib/view/overlay/CanvasOverlay.js +5 -4
  354. package/lib/view/overlay/CanvasOverlay.js.map +1 -1
  355. package/lib/view/overlay/ToolOverlay.d.ts +1 -1
  356. package/lib/view/overlay/ToolOverlay.js +1 -1
  357. package/lib/view/overlay/ToolOverlay.js.map +1 -1
  358. package/lib/view/shape/Circle.d.ts +9 -1
  359. package/lib/view/shape/Circle.js +5 -5
  360. package/lib/view/shape/Circle.js.map +1 -1
  361. package/lib/view/shape/Ellipse.d.ts +10 -1
  362. package/lib/view/shape/Ellipse.js +5 -5
  363. package/lib/view/shape/Ellipse.js.map +1 -1
  364. package/lib/view/shape/Line.d.ts +14 -1
  365. package/lib/view/shape/Line.js +5 -7
  366. package/lib/view/shape/Line.js.map +1 -1
  367. package/lib/view/shape/Path.d.ts +3 -2
  368. package/lib/view/shape/Path.js +3 -3
  369. package/lib/view/shape/Path.js.map +1 -1
  370. package/lib/view/shape/Polygon.d.ts +5 -3
  371. package/lib/view/shape/Polygon.js +6 -6
  372. package/lib/view/shape/Polygon.js.map +1 -1
  373. package/lib/view/shape/Polyline.d.ts +7 -1
  374. package/lib/view/shape/Polyline.js +8 -6
  375. package/lib/view/shape/Polyline.js.map +1 -1
  376. package/lib/view/shape/Rect.d.ts +11 -13
  377. package/lib/view/shape/Rect.js +6 -9
  378. package/lib/view/shape/Rect.js.map +1 -1
  379. package/lib/view/shape/Text.d.ts +19 -1
  380. package/lib/view/shape/Text.js +29 -21
  381. package/lib/view/shape/Text.js.map +1 -1
  382. package/lib/view/text/BaseText.d.ts +12 -15
  383. package/lib/view/text/BaseText.js +46 -29
  384. package/lib/view/text/BaseText.js.map +1 -1
  385. package/lib/view/text/LineText.d.ts +19 -7
  386. package/lib/view/text/LineText.js +62 -57
  387. package/lib/view/text/LineText.js.map +1 -1
  388. package/package.json +2 -1
  389. package/src/LogicFlow.tsx +163 -79
  390. package/src/algorithm/edge.ts +1 -0
  391. package/src/algorithm/index.ts +2 -0
  392. package/src/algorithm/outline.ts +2 -2
  393. package/src/common/drag.ts +219 -0
  394. package/src/common/history.ts +108 -0
  395. package/src/common/index.ts +6 -0
  396. package/src/common/keyboard.ts +108 -0
  397. package/src/common/matrix.ts +122 -0
  398. package/src/common/vector.ts +93 -0
  399. package/src/constant/index.ts +43 -1
  400. package/src/event/eventArgs.ts +173 -34
  401. package/src/event/eventEmitter.ts +2 -3
  402. package/src/index.ts +6 -1
  403. package/src/keyboard/index.ts +2 -0
  404. package/src/keyboard/shortcut.ts +79 -8
  405. package/src/model/BaseModel.ts +18 -7
  406. package/src/model/EditConfigModel.ts +209 -97
  407. package/src/model/GraphModel.ts +64 -9
  408. package/src/model/TransformModel.ts +1 -1
  409. package/src/model/edge/BaseEdgeModel.ts +75 -44
  410. package/src/model/edge/BezierEdgeModel.ts +7 -6
  411. package/src/model/edge/LineEdgeModel.ts +2 -0
  412. package/src/model/edge/PolylineEdgeModel.ts +24 -18
  413. package/src/model/node/BaseNodeModel.ts +72 -47
  414. package/src/model/node/CircleNodeModel.ts +8 -7
  415. package/src/model/node/DiamondNodeModel.ts +9 -6
  416. package/src/model/node/EllipseNodeModel.ts +9 -6
  417. package/src/model/node/HtmlNodeModel.ts +8 -7
  418. package/src/model/node/PolygonNodeModel.ts +9 -7
  419. package/src/model/node/RectNodeModel.ts +16 -8
  420. package/src/model/node/TextNodeModel.ts +14 -1
  421. package/src/options.ts +11 -15
  422. package/src/tool/MultipleSelectTool.tsx +6 -6
  423. package/src/tool/TextEditTool.tsx +3 -3
  424. package/src/tool/index.ts +96 -2
  425. package/src/util/drag.ts +22 -6
  426. package/src/util/edge.ts +39 -13
  427. package/src/util/index.ts +1 -0
  428. package/src/util/node.ts +36 -13
  429. package/src/util/resize.ts +286 -0
  430. package/src/view/Anchor.tsx +7 -5
  431. package/src/view/Control.tsx +93 -62
  432. package/src/view/Graph.tsx +21 -4
  433. package/src/view/Rotate.tsx +2 -1
  434. package/src/view/behavior/index.ts +2 -0
  435. package/src/{tool → view/behavior}/snapline.ts +3 -4
  436. package/src/view/edge/AdjustPoint.tsx +35 -49
  437. package/src/view/edge/BaseEdge.tsx +65 -45
  438. package/src/view/node/BaseNode.tsx +55 -28
  439. package/src/view/node/CircleNode.tsx +3 -1
  440. package/src/view/node/DiamondNode.tsx +3 -1
  441. package/src/view/node/EllipseNode.tsx +3 -1
  442. package/src/view/node/HtmlNode.tsx +5 -3
  443. package/src/view/node/PolygonNode.tsx +3 -1
  444. package/src/view/node/RectNode.tsx +3 -1
  445. package/src/view/node/TextNode.tsx +4 -2
  446. package/src/view/overlay/CanvasOverlay.tsx +5 -4
  447. package/src/view/overlay/ToolOverlay.tsx +1 -1
  448. package/src/view/shape/Circle.tsx +21 -7
  449. package/src/view/shape/Ellipse.tsx +20 -6
  450. package/src/view/shape/Line.tsx +24 -9
  451. package/src/view/shape/Path.tsx +9 -6
  452. package/src/view/shape/Polygon.tsx +13 -10
  453. package/src/view/shape/Polyline.tsx +20 -8
  454. package/src/view/shape/Rect.tsx +19 -19
  455. package/src/view/shape/Text.tsx +64 -33
  456. package/src/view/text/BaseText.tsx +76 -42
  457. package/src/view/text/LineText.tsx +94 -80
  458. package/tsconfig.json +1 -1
  459. package/es/tool/snapline.d.ts +0 -3
  460. package/es/tool/snapline.js.map +0 -1
  461. package/es/tool/tool.d.ts +0 -22
  462. package/es/tool/tool.js +0 -43
  463. package/es/tool/tool.js.map +0 -1
  464. package/lib/tool/snapline.d.ts +0 -3
  465. package/lib/tool/snapline.js.map +0 -1
  466. package/lib/tool/tool.d.ts +0 -22
  467. package/lib/tool/tool.js +0 -49
  468. package/lib/tool/tool.js.map +0 -1
  469. package/src/tool/tool.ts +0 -66
@@ -18,9 +18,11 @@ export type ICircleNodeProperties = {
18
18
  [key: string]: any
19
19
  }
20
20
 
21
- export class CircleNodeModel extends BaseNodeModel {
21
+ export class CircleNodeModel<
22
+ P extends ICircleNodeProperties = ICircleNodeProperties,
23
+ > extends BaseNodeModel<P> {
22
24
  modelType = ModelType.CIRCLE_NODE
23
- @observable properties: ICircleNodeProperties = {}
25
+ // @observable properties: ICircleNodeProperties = {}
24
26
  @observable r = 50
25
27
 
26
28
  @computed get width(): number {
@@ -31,9 +33,9 @@ export class CircleNodeModel extends BaseNodeModel {
31
33
  return this.r * 2
32
34
  }
33
35
 
34
- constructor(data: NodeConfig, graphModel: GraphModel) {
36
+ constructor(data: NodeConfig<P>, graphModel: GraphModel) {
35
37
  super(data, graphModel)
36
- this.properties = data.properties || {}
38
+ // this.properties = data.properties || {}
37
39
 
38
40
  this.setAttributes()
39
41
  }
@@ -54,11 +56,11 @@ export class CircleNodeModel extends BaseNodeModel {
54
56
  theme: { circle },
55
57
  },
56
58
  } = this
57
- const { style: customStyle } = this.properties
59
+ const { style: customStyle = {} } = this.properties
58
60
  return {
59
61
  ...style,
60
- ...(customStyle ?? {}),
61
62
  ...cloneDeep(circle),
63
+ ...cloneDeep(customStyle),
62
64
  }
63
65
  }
64
66
 
@@ -81,7 +83,6 @@ export class CircleNodeModel extends BaseNodeModel {
81
83
  this.setProperties({
82
84
  r: width,
83
85
  })
84
-
85
86
  return this.getData()
86
87
  }
87
88
  }
@@ -18,18 +18,20 @@ export type IDiamondNodeProperties = {
18
18
  style?: LogicFlow.CommonTheme
19
19
  textStyle?: LogicFlow.CommonTheme
20
20
 
21
- [key: string]: any
21
+ [key: string]: unknown
22
22
  }
23
23
 
24
- export class DiamondNodeModel extends BaseNodeModel {
24
+ export class DiamondNodeModel<
25
+ P extends IDiamondNodeProperties = IDiamondNodeProperties,
26
+ > extends BaseNodeModel<P> {
25
27
  modelType = ModelType.DIAMOND_NODE
26
28
  @observable rx = 30
27
29
  @observable ry = 50
28
- @observable properties: IDiamondNodeProperties = {}
30
+ // @observable properties: IDiamondNodeProperties = {}
29
31
 
30
- constructor(data: NodeConfig, graphModel: GraphModel) {
32
+ constructor(data: NodeConfig<P>, graphModel: GraphModel) {
31
33
  super(data, graphModel)
32
- this.properties = data.properties || {}
34
+ // this.properties = data.properties || {}
33
35
 
34
36
  this.setAttributes()
35
37
  }
@@ -53,9 +55,11 @@ export class DiamondNodeModel extends BaseNodeModel {
53
55
  theme: { diamond },
54
56
  },
55
57
  } = this
58
+ const { style: customStyle = {} } = this.properties
56
59
  return {
57
60
  ...style,
58
61
  ...cloneDeep(diamond),
62
+ ...cloneDeep(customStyle),
59
63
  }
60
64
  }
61
65
 
@@ -120,7 +124,6 @@ export class DiamondNodeModel extends BaseNodeModel {
120
124
  rx: width,
121
125
  ry: height,
122
126
  })
123
-
124
127
  return this.getData()
125
128
  }
126
129
  }
@@ -16,18 +16,20 @@ export type IEllipseNodeProperties = {
16
16
  style?: LogicFlow.CommonTheme
17
17
  textStyle?: LogicFlow.CommonTheme
18
18
 
19
- [key: string]: any
19
+ [key: string]: unknown
20
20
  }
21
21
 
22
- export class EllipseNodeModel extends BaseNodeModel {
22
+ export class EllipseNodeModel<
23
+ P extends IEllipseNodeProperties = IEllipseNodeProperties,
24
+ > extends BaseNodeModel<P> {
23
25
  modelType = ModelType.ELLIPSE_NODE
24
26
  @observable rx = 30
25
27
  @observable ry = 45
26
- @observable properties: IEllipseNodeProperties = {}
28
+ // @observable properties: IEllipseNodeProperties = {}
27
29
 
28
- constructor(data: NodeConfig, graphModel: GraphModel) {
30
+ constructor(data: NodeConfig<P>, graphModel: GraphModel) {
29
31
  super(data, graphModel)
30
- this.properties = data.properties || {}
32
+ // this.properties = data.properties || {}
31
33
 
32
34
  this.setAttributes()
33
35
  }
@@ -51,9 +53,11 @@ export class EllipseNodeModel extends BaseNodeModel {
51
53
  theme: { ellipse },
52
54
  },
53
55
  } = this
56
+ const { style: customStyle = {} } = this.properties
54
57
  return {
55
58
  ...style,
56
59
  ...cloneDeep(ellipse),
60
+ ...cloneDeep(customStyle),
57
61
  }
58
62
  }
59
63
 
@@ -86,7 +90,6 @@ export class EllipseNodeModel extends BaseNodeModel {
86
90
  rx: width,
87
91
  ry: height,
88
92
  })
89
-
90
93
  return this.getData()
91
94
  }
92
95
  }
@@ -3,26 +3,27 @@ import { Model } from '../BaseModel'
3
3
  import { ModelType } from '../../constant'
4
4
 
5
5
  import AnchorConfig = Model.AnchorConfig
6
- import { observable } from 'mobx'
7
6
  import LogicFlow from '../../LogicFlow'
8
7
  import GraphModel from '../GraphModel'
9
8
 
10
- export type IHtmlNodeModel = {
9
+ export type IHtmlNodeProperties = {
11
10
  width?: number
12
11
  height?: number
13
12
  style?: LogicFlow.CommonTheme
14
13
  textStyle?: LogicFlow.CommonTheme
15
14
 
16
- [key: string]: any
15
+ [key: string]: unknown
17
16
  }
18
17
 
19
- export class HtmlNodeModel extends BaseNodeModel {
18
+ export class HtmlNodeModel<
19
+ P extends IHtmlNodeProperties = IHtmlNodeProperties,
20
+ > extends BaseNodeModel<P> {
20
21
  modelType = ModelType.HTML_NODE
21
- @observable properties: IHtmlNodeModel = {}
22
+ // @observable properties: IHtmlNodeProperties = {}
22
23
 
23
- constructor(data: LogicFlow.NodeConfig, graphModel: GraphModel) {
24
+ constructor(data: LogicFlow.NodeConfig<P>, graphModel: GraphModel) {
24
25
  super(data, graphModel)
25
- this.properties = data.properties || {}
26
+ // this.properties = data.properties || {}
26
27
 
27
28
  this.setAttributes()
28
29
  }
@@ -19,10 +19,12 @@ export type IPolygonNodeProperties = {
19
19
  style?: LogicFlow.CommonTheme
20
20
  textStyle?: LogicFlow.CommonTheme
21
21
 
22
- [key: string]: any
22
+ [key: string]: unknown
23
23
  }
24
24
 
25
- export class PolygonNodeModel extends BaseNodeModel {
25
+ export class PolygonNodeModel<
26
+ P extends IPolygonNodeProperties = IPolygonNodeProperties,
27
+ > extends BaseNodeModel<P> {
26
28
  modelType = ModelType.POLYGON_NODE
27
29
  @observable points: PointTuple[] = [
28
30
  [50, 0],
@@ -36,11 +38,11 @@ export class PolygonNodeModel extends BaseNodeModel {
36
38
  // [10, 78],
37
39
  // [160, 198], // 五角星
38
40
  ]
39
- @observable properties: IPolygonNodeProperties = {}
41
+ // @observable properties: IPolygonNodeProperties = {}
40
42
 
41
- constructor(data: NodeConfig, graphModel: GraphModel) {
43
+ constructor(data: NodeConfig<P>, graphModel: GraphModel) {
42
44
  super(data, graphModel)
43
- this.properties = data.properties || {}
45
+ // this.properties = data.properties || {}
44
46
 
45
47
  this.setAttributes()
46
48
  }
@@ -66,11 +68,11 @@ export class PolygonNodeModel extends BaseNodeModel {
66
68
  theme: { polygon },
67
69
  },
68
70
  } = this
69
- const { style: customStyle } = this.properties
71
+ const { style: customStyle = {} } = this.properties
70
72
  return {
71
73
  ...style,
72
74
  ...cloneDeep(polygon),
73
- ...(cloneDeep(customStyle) || {}),
75
+ ...cloneDeep(customStyle),
74
76
  }
75
77
  }
76
78
 
@@ -5,33 +5,40 @@ import GraphModel from '../GraphModel'
5
5
  import LogicFlow from '../../LogicFlow'
6
6
  import { ModelType } from '../../constant'
7
7
 
8
- export type IRectNodeModel = {
8
+ export type IRectNodeProperties = {
9
9
  width?: number
10
10
  height?: number
11
+ radius?: number
11
12
  style?: LogicFlow.CommonTheme
12
13
  textStyle?: LogicFlow.CommonTheme
13
14
 
14
- [key: string]: any
15
+ [key: string]: unknown
15
16
  }
16
17
 
17
- export class RectNodeModel extends BaseNodeModel {
18
+ export class RectNodeModel<
19
+ P extends IRectNodeProperties = IRectNodeProperties,
20
+ > extends BaseNodeModel<P> {
18
21
  modelType = ModelType.RECT_NODE
19
22
  @observable radius = 0
20
- @observable properties: IRectNodeModel = {}
23
+ // @observable properties: P
21
24
 
22
- constructor(data: LogicFlow.NodeConfig, graphModel: GraphModel) {
25
+ constructor(data: LogicFlow.NodeConfig<P>, graphModel: GraphModel) {
23
26
  super(data, graphModel)
24
- this.properties = data.properties || {}
25
27
 
28
+ // TODO:类字段初始化会覆盖 super、setAttributes 中设置的属性
29
+ // this.properties = data.properties || {}
30
+ // TODO: bug here, 上面更新 properties 会触发 setAttributes,下面再主动调用,会导致触发两次
26
31
  this.setAttributes()
27
32
  }
28
33
 
29
34
  setAttributes() {
30
35
  super.setAttributes()
31
36
 
32
- const { width, height } = this.properties
37
+ const { width, height, radius } = this.properties
33
38
  if (width) this.width = width
34
39
  if (height) this.height = height
40
+ // 矩形特有
41
+ if (radius) this.radius = radius
35
42
  }
36
43
 
37
44
  getDefaultAnchor() {
@@ -43,13 +50,14 @@ export class RectNodeModel extends BaseNodeModel {
43
50
  { x: x - width / 2, y, id: `${this.id}_3` },
44
51
  ]
45
52
  }
46
-
47
53
  getNodeStyle() {
48
54
  const style = super.getNodeStyle()
49
55
  const { rect } = this.graphModel.theme
56
+ const { style: customStyle = {} } = this.properties
50
57
  return {
51
58
  ...style,
52
59
  ...cloneDeep(rect),
60
+ ...cloneDeep(customStyle),
53
61
  }
54
62
  }
55
63
  }
@@ -3,18 +3,31 @@ import { computed } from 'mobx'
3
3
  import BaseNodeModel from './BaseNodeModel'
4
4
  import { ModelType } from '../../constant'
5
5
  import { getSvgTextWidthHeight } from '../../util'
6
+ import LogicFlow from '../../LogicFlow'
6
7
 
7
- export class TextNodeModel extends BaseNodeModel {
8
+ export type ITextNodeProperties = {
9
+ style?: LogicFlow.CommonTheme
10
+ textStyle?: LogicFlow.CommonTheme
11
+
12
+ [key: string]: unknown
13
+ }
14
+
15
+ export class TextNodeModel<
16
+ P extends ITextNodeProperties = ITextNodeProperties,
17
+ > extends BaseNodeModel<P> {
8
18
  modelType = ModelType.TEXT_NODE
9
19
 
10
20
  getTextStyle() {
11
21
  const style = super.getTextStyle()
12
22
  const { text } = this.graphModel.theme
23
+ const { textStyle } = this.properties
13
24
  return {
14
25
  ...style,
15
26
  ...cloneDeep(text),
27
+ ...cloneDeep(textStyle),
16
28
  }
17
29
  }
30
+
18
31
  @computed get width(): number {
19
32
  const rows = String(this.text.value).split(/[\r\n]/g)
20
33
  const { fontSize } = this.getTextStyle()
package/src/options.ts CHANGED
@@ -2,7 +2,7 @@ import { assign } from 'lodash-es'
2
2
  import { createElement as h } from 'preact/compat'
3
3
  import LogicFlow from './LogicFlow'
4
4
  import { KeyboardDef } from './keyboard'
5
- import { OverlapMode } from './constant'
5
+ import { OverlapMode, TextMode } from './constant'
6
6
  import { Grid } from './view/overlay'
7
7
 
8
8
  import GridOptions = Grid.GridOptions
@@ -10,8 +10,8 @@ import GridOptions = Grid.GridOptions
10
10
  export namespace Options {
11
11
  import NodeData = LogicFlow.NodeData
12
12
  import EdgeData = LogicFlow.EdgeData
13
- import ExtensionConstructor = LogicFlow.ExtensionConstructor
14
13
  import GraphData = LogicFlow.GraphData
14
+ import ExtensionType = LogicFlow.ExtensionType
15
15
  export type EdgeType = 'line' | 'polyline' | 'bezier' | string
16
16
  export type BackgroundConfig = {
17
17
  // 背景图片地址
@@ -68,10 +68,15 @@ export namespace Options {
68
68
  edgeType?: EdgeType
69
69
  adjustEdge?: boolean
70
70
 
71
+ // 元素文本类型:text or label
72
+ textMode?: TextMode
73
+ edgeTextMode?: TextMode
74
+ nodeTextMode?: TextMode
75
+
71
76
  allowRotate?: boolean // 允许节点旋转
72
77
  allowResize?: boolean // 是否允许缩放
73
78
 
74
- isSilentMode?: boolean
79
+ isSilentMode?: boolean // 是否为静默模式:可以简单理解为“只读”模式,这种模式下,画布中的节点和边不可移动,不可进行文案修改,没有锚点。
75
80
  stopScrollGraph?: boolean
76
81
  stopZoomGraph?: boolean
77
82
  stopMoveGraph?:
@@ -88,7 +93,7 @@ export namespace Options {
88
93
  guards?: GuardsConfig
89
94
  overlapMode?: OverlapMode
90
95
 
91
- plugins?: ExtensionConstructor[]
96
+ plugins?: ExtensionType[]
92
97
  pluginsOptions?: Record<string, any>
93
98
  disabledPlugins?: string[]
94
99
  disabledTools?: string[]
@@ -111,22 +116,13 @@ export namespace Options {
111
116
  export function get(options: Partial<Manual>) {
112
117
  const { ...others } = options
113
118
  const container = options.container
114
- if (container != null) {
115
- if (options.width == null) {
116
- others.width = container.clientWidth
117
- }
118
- if (options.height == null) {
119
- others.height = container.clientHeight
120
- }
121
- } else {
119
+ if (!container) {
122
120
  throw new Error(
123
121
  'Ensure the container of LogicFlow is specified and valid.',
124
122
  )
125
123
  }
126
124
 
127
- const result = assign({}, defaults, others) as Options.Definition
128
-
129
- return result
125
+ return assign({}, defaults, others) as Options.Definition
130
126
  }
131
127
  }
132
128
 
@@ -1,16 +1,16 @@
1
1
  import { Component } from 'preact/compat'
2
+ import { IToolProps } from '.'
2
3
  import { Model, observer } from '..'
3
4
  import LogicFlow from '../LogicFlow'
4
5
  import { StepDrag, IDragParams } from '../util'
5
6
  import { ElementType, EventType } from '../constant'
6
7
  import { getNodeOutline, getEdgeOutline } from '../algorithm/outline'
7
- import { IToolProps } from './tool'
8
8
 
9
9
  import GraphData = LogicFlow.GraphData
10
10
 
11
11
  @observer
12
12
  export default class MultipleSelect extends Component<IToolProps> {
13
- static toolName = 'multipleSelect'
13
+ static toolName = 'multiple-select-tool'
14
14
  stepDrag: StepDrag
15
15
 
16
16
  constructor(props: IToolProps) {
@@ -40,13 +40,13 @@ export default class MultipleSelect extends Component<IToolProps> {
40
40
  clientY,
41
41
  ctrlKey,
42
42
  })
43
- this.props.logicFlow.container
43
+ this.props.lf.container
44
44
  ?.querySelector('.lf-canvas-overlay[name="canvas-overlay"]')
45
45
  ?.dispatchEvent(newEvent)
46
46
  }
47
47
  onDragging = ({ deltaX, deltaY }: IDragParams) => {
48
- const { graphModel, logicFlow } = this.props
49
- const { SCALE_X, SCALE_Y } = logicFlow.getTransform()
48
+ const { graphModel, lf } = this.props
49
+ const { SCALE_X, SCALE_Y } = lf.getTransform()
50
50
  const selectElements = graphModel.getSelectElements(true)
51
51
  graphModel.moveNodes(
52
52
  selectElements.nodes.map((node) => node.id),
@@ -88,7 +88,7 @@ export default class MultipleSelect extends Component<IToolProps> {
88
88
  const {
89
89
  graphModel: { selectElements, transformModel },
90
90
  } = this.props
91
- const { SCALE_X, SCALE_Y } = this.props.logicFlow.getTransform()
91
+ const { SCALE_X, SCALE_Y } = this.props.lf.getTransform()
92
92
  if (selectElements.size <= 1) return
93
93
  let x = Number.MAX_SAFE_INTEGER
94
94
  let y = Number.MAX_SAFE_INTEGER
@@ -1,7 +1,7 @@
1
- import { createRef, Component } from 'preact'
1
+ import { createRef, Component } from 'preact/compat'
2
+ import { IToolProps } from '.'
2
3
  import { ElementState, observer } from '..'
3
4
  import { ElementType, EventType, ModelType } from '../constant'
4
- import { IToolProps } from './tool'
5
5
 
6
6
  type IState = {
7
7
  style: {
@@ -12,7 +12,7 @@ type IState = {
12
12
 
13
13
  @observer
14
14
  export class TextEditTool extends Component<IToolProps, IState> {
15
- static toolName = 'textEdit'
15
+ static toolName = 'text-edit-tool'
16
16
  ref = createRef()
17
17
  __prevText = {
18
18
  type: '',
package/src/tool/index.ts CHANGED
@@ -1,2 +1,96 @@
1
- export * from './tool'
2
- export * from './snapline'
1
+ import { Component, ReactElement } from 'preact/compat'
2
+ import { action, observable } from 'mobx'
3
+ import { forEach } from 'lodash-es'
4
+ import TextEdit from './TextEditTool'
5
+ import MultipleSelect from './MultipleSelectTool'
6
+ import LogicFlow from '../LogicFlow'
7
+ import { ElementState, EventType } from '../constant'
8
+ import { GraphModel, BaseEdgeModel, BaseNodeModel } from '../model'
9
+
10
+ export type IToolProps = {
11
+ lf: LogicFlow
12
+ graphModel: GraphModel
13
+ textEditElement?: BaseNodeModel | BaseEdgeModel
14
+ }
15
+
16
+ type ToolConstructor = new (props: IToolProps) => Component<IToolProps>
17
+
18
+ // 默认内置的工具
19
+ const defaultTools = [TextEdit, MultipleSelect]
20
+
21
+ export class Tool {
22
+ tools?: Component[]
23
+ components?: ReactElement<IToolProps>[]
24
+ @observable toolMap = new Map<string, ToolConstructor>()
25
+
26
+ disabledToolMap = new Map<string, ToolConstructor>()
27
+ instance: LogicFlow
28
+
29
+ constructor(instance: LogicFlow) {
30
+ this.instance = instance
31
+ forEach(defaultTools, (tool) => {
32
+ if (!this.isDisabled(tool.toolName)) {
33
+ this.registerTool(tool.toolName, tool)
34
+ }
35
+ })
36
+
37
+ // @see https://github.com/didi/LogicFlow/issues/152
38
+ const { graphModel } = instance
39
+ const { eventCenter } = graphModel
40
+ eventCenter.on(
41
+ `${EventType.GRAPH_TRANSFORM},${EventType.NODE_CLICK},${EventType.BLANK_CLICK} `,
42
+ () => {
43
+ const {
44
+ textEditElement,
45
+ editConfigModel: { edgeTextEdit, nodeTextEdit },
46
+ } = graphModel
47
+ // fix #826, 保留之前的文本可以编辑点击空白才设置为不可编辑。如果以后有其他需求再改。
48
+ if ((edgeTextEdit || nodeTextEdit) && textEditElement) {
49
+ graphModel.textEditElement?.setElementState(ElementState.DEFAULT)
50
+ }
51
+ },
52
+ )
53
+ }
54
+
55
+ private isDisabled(toolName) {
56
+ return this.instance.options.disabledTools?.indexOf(toolName) !== -1
57
+ }
58
+
59
+ // 注册工具
60
+ registerTool(name: string, component: ToolConstructor) {
61
+ this.toolMap.set(name, component)
62
+ }
63
+
64
+ // 禁用工具
65
+ @action
66
+ disableTool(name: string): boolean | Error {
67
+ const tool = this.toolMap.get(name)
68
+ if (tool) {
69
+ this.disabledToolMap.set(name, tool)
70
+ this.toolMap.delete(name)
71
+ return true
72
+ }
73
+ throw new Error('禁用失败,不存在名为 ${tool} 的工具')
74
+ }
75
+
76
+ @action
77
+ enableTool(name: string): boolean | Error {
78
+ const tool = this.disabledToolMap.get(name)
79
+ if (tool) {
80
+ this.toolMap.set(name, tool)
81
+ this.disabledToolMap.delete(name)
82
+ return true
83
+ }
84
+ throw new Error('不存在名为 ${tool} 的工具')
85
+ }
86
+
87
+ getTools() {
88
+ return Array.from(this.toolMap.values())
89
+ }
90
+
91
+ getInstance() {
92
+ return this.instance
93
+ }
94
+ }
95
+
96
+ export default Tool
package/src/util/drag.ts CHANGED
@@ -10,7 +10,7 @@ const LEFT_MOUSE_BUTTON_CODE = 0
10
10
  export type IDragParams = {
11
11
  deltaX: number
12
12
  deltaY: number
13
- event: MouseEvent | null
13
+ event?: MouseEvent
14
14
  [key: string]: unknown
15
15
  }
16
16
 
@@ -23,9 +23,16 @@ export type ICreateDragParams = {
23
23
  }
24
24
 
25
25
  export type IStepperDragProps = {
26
- eventType?: 'NODE' | 'BLANK' | 'SELECTION' | 'ADJUST_POINT' | ''
26
+ eventType?:
27
+ | 'NODE'
28
+ | 'BLANK'
29
+ | 'SELECTION'
30
+ | 'ADJUST_POINT'
31
+ | 'TEXT'
32
+ | 'LABEL'
33
+ | ''
27
34
  eventCenter?: EventEmitter
28
- model?: Model.BaseModel | null
35
+ model?: Model.BaseModel | unknown
29
36
  data?: Record<string, unknown>
30
37
  [key: string]: unknown
31
38
  } & Partial<ICreateDragParams>
@@ -39,9 +46,16 @@ export class StepDrag {
39
46
 
40
47
  step: number
41
48
  isStopPropagation: boolean
42
- eventType: 'NODE' | 'BLANK' | 'SELECTION' | 'ADJUST_POINT' | ''
49
+ eventType:
50
+ | 'NODE'
51
+ | 'BLANK'
52
+ | 'SELECTION'
53
+ | 'ADJUST_POINT'
54
+ | 'TEXT'
55
+ | 'LABEL'
56
+ | ''
43
57
  eventCenter?: EventEmitter
44
- model?: Model.BaseModel | null
58
+ model?: Model.BaseModel | any // TODO: 如何兼容 LabelModel 类型。 LabelModel 能否是 BaseModel 的实现呢?
45
59
  data?: Record<string, unknown>
46
60
 
47
61
  // 运行时
@@ -141,6 +155,8 @@ export class StepDrag {
141
155
  event: e,
142
156
  })
143
157
  this.eventCenter?.emit(EventType[`${this.eventType}_MOUSEMOVE`], {
158
+ deltaX,
159
+ deltaY,
144
160
  e,
145
161
  data: this.data || elementData,
146
162
  })
@@ -180,7 +196,7 @@ export class StepDrag {
180
196
 
181
197
  DOC.removeEventListener('mousemove', this.handleMouseMove, false)
182
198
  DOC.removeEventListener('mouseup', this.handleMouseUp, false)
183
- this.onDragEnd({ event: null })
199
+ this.onDragEnd({ event: undefined })
184
200
  this.isDragging = false
185
201
  }
186
202
  }