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

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 +10 -10
  2. package/.turbo/turbo-build.log +36 -36
  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
@@ -1,5 +1,5 @@
1
- import { assign, cloneDeep, find } from 'lodash-es'
2
- import { action, computed, observable, toJS } from 'mobx'
1
+ import { assign, cloneDeep, find, isUndefined } from 'lodash-es'
2
+ import { action, computed, isObservable, observable, toJS } from 'mobx'
3
3
  import { BaseNodeModel, GraphModel, Model } from '..'
4
4
  import LogicFlow from '../../LogicFlow'
5
5
  import {
@@ -15,17 +15,22 @@ import {
15
15
  ElementType,
16
16
  ModelType,
17
17
  OverlapMode,
18
+ TextMode,
18
19
  } from '../../constant'
19
20
 
20
21
  import Point = LogicFlow.Point
21
22
  import EdgeData = LogicFlow.EdgeData
22
23
  import EdgeConfig = LogicFlow.EdgeConfig
24
+ import TextConfig = LogicFlow.TextConfig
25
+ import PropertiesType = LogicFlow.PropertiesType
23
26
 
24
- export interface IBaseEdgeModel extends Model.BaseModel {
27
+ export interface IBaseEdgeModel<P extends PropertiesType>
28
+ extends Model.BaseModel<P> {
25
29
  /**
26
30
  * model 基础类型,固定为 edge
27
31
  */
28
32
  readonly BaseType: ElementType.EDGE
33
+ properties: P
29
34
 
30
35
  sourceNodeId: string
31
36
  targetNodeId: string
@@ -44,7 +49,9 @@ export interface IBaseEdgeModel extends Model.BaseModel {
44
49
  arrowConfig?: LogicFlow.ArrowConfig
45
50
  }
46
51
 
47
- export class BaseEdgeModel implements IBaseEdgeModel {
52
+ export class BaseEdgeModel<P extends PropertiesType = PropertiesType>
53
+ implements IBaseEdgeModel<P>
54
+ {
48
55
  readonly BaseType = ElementType.EDGE
49
56
  static BaseType: ElementType = ElementType.EDGE
50
57
 
@@ -56,14 +63,15 @@ export class BaseEdgeModel implements IBaseEdgeModel {
56
63
  @observable startPoint!: Point
57
64
  @observable endPoint!: Point
58
65
 
59
- @observable text = {
66
+ @observable textMode = TextMode.TEXT
67
+ @observable text: Required<TextConfig> = {
60
68
  value: '',
61
69
  x: 0,
62
70
  y: 0,
63
71
  draggable: false,
64
72
  editable: true,
65
73
  }
66
- @observable properties: Record<string, unknown> = {}
74
+ @observable properties: P
67
75
  @observable points = ''
68
76
  @observable pointsList: Point[] = []
69
77
 
@@ -83,7 +91,6 @@ export class BaseEdgeModel implements IBaseEdgeModel {
83
91
  graphModel: GraphModel
84
92
  @observable zIndex: number = 0
85
93
  @observable state = ElementState.DEFAULT
86
-
87
94
  modelType = ModelType.EDGE
88
95
  additionStateData?: Model.AdditionStateDataType
89
96
 
@@ -102,8 +109,10 @@ export class BaseEdgeModel implements IBaseEdgeModel {
102
109
  };
103
110
  [propName: string]: unknown // 支持自定义
104
111
 
105
- constructor(data: EdgeConfig, graphModel: GraphModel) {
112
+ constructor(data: EdgeConfig<P>, graphModel: GraphModel) {
106
113
  this.graphModel = graphModel
114
+ this.properties = data.properties ?? ({} as P)
115
+
107
116
  this.initEdgeData(data)
108
117
  this.setAttributes()
109
118
  }
@@ -182,7 +191,6 @@ export class BaseEdgeModel implements IBaseEdgeModel {
182
191
  ...this.graphModel.theme.edgeAdjust,
183
192
  }
184
193
  }
185
-
186
194
  /**
187
195
  * 自定义边文本样式
188
196
  *
@@ -373,16 +381,23 @@ export class BaseEdgeModel implements IBaseEdgeModel {
373
381
  * @overridable 支持重写
374
382
  */
375
383
  getData(): EdgeData {
376
- const { x, y, value } = this.text
384
+ let { properties } = this
385
+ if (isObservable(properties)) {
386
+ properties = toJS(properties)
387
+ }
377
388
  const data: EdgeData = {
378
389
  id: this.id,
379
390
  type: this.type,
391
+ properties,
380
392
  sourceNodeId: this.sourceNode.id,
381
393
  targetNodeId: this.targetNode.id,
382
394
  startPoint: assign({}, this.startPoint),
383
395
  endPoint: assign({}, this.endPoint),
384
- properties: toJS(this.properties),
385
396
  }
397
+ if (this.graphModel.overlapMode === OverlapMode.INCREASE) {
398
+ data.zIndex = this.zIndex
399
+ }
400
+ const { x, y, value } = this.text
386
401
  if (value) {
387
402
  data.text = {
388
403
  x,
@@ -390,9 +405,6 @@ export class BaseEdgeModel implements IBaseEdgeModel {
390
405
  value,
391
406
  }
392
407
  }
393
- if (this.graphModel.overlapMode === OverlapMode.INCREASE) {
394
- data.zIndex = this.zIndex
395
- }
396
408
  return data
397
409
  }
398
410
 
@@ -415,7 +427,12 @@ export class BaseEdgeModel implements IBaseEdgeModel {
415
427
  */
416
428
  @action
417
429
  setProperty(key: string, val: any): void {
418
- this.properties[key] = formatData(val)
430
+ const preProperties = toJS(this.properties)
431
+ this.properties = {
432
+ ...preProperties,
433
+ [key]: formatData(val),
434
+ }
435
+
419
436
  this.setAttributes()
420
437
  }
421
438
 
@@ -431,8 +448,7 @@ export class BaseEdgeModel implements IBaseEdgeModel {
431
448
 
432
449
  /**
433
450
  * 设置边的属性,会触发重新渲染
434
- * @param key 属性名
435
- * @param val 属性值
451
+ * @param properties 要更新的 properties,会做合并
436
452
  */
437
453
  @action
438
454
  setProperties(properties: Record<string, any>): void {
@@ -493,34 +509,51 @@ export class BaseEdgeModel implements IBaseEdgeModel {
493
509
  }
494
510
  }
495
511
 
512
+ /**
513
+ * 设置当前元素的文本模式
514
+ * @param mode
515
+ */
516
+ @action setTextMode(mode: TextMode) {
517
+ this.textMode = mode
518
+ }
519
+
496
520
  /**
497
521
  * 内部方法,处理初始化文本格式
498
522
  */
499
523
  @action formatText(data: EdgeConfig) {
500
- // 暂时处理,只传入text的情况
501
524
  const { x, y } = this.textPosition
502
- if (!data.text || typeof data.text === 'string') {
503
- this.text = {
504
- value: data.text || '',
505
- x,
506
- y,
507
- draggable: this.text.draggable,
508
- editable: this.text.editable,
509
- }
510
- return
525
+ const { text } = data
526
+ let textConfig: Required<TextConfig> = {
527
+ value: '',
528
+ x,
529
+ y,
530
+ draggable: false,
531
+ editable: true,
511
532
  }
512
533
 
513
- if (Object.prototype.toString.call(data.text) === '[object Object]') {
514
- this.text = {
515
- x: data.text.x || x,
516
- y: data.text.y || y,
517
- value: data.text.value || '',
518
- draggable: this.text.draggable,
519
- editable: this.text.editable,
534
+ if (text) {
535
+ if (typeof text === 'string') {
536
+ textConfig = {
537
+ ...textConfig,
538
+ value: text,
539
+ }
540
+ } else {
541
+ textConfig = {
542
+ ...textConfig,
543
+ x: text.x ?? x,
544
+ y: text.y ?? y,
545
+ value: text.value ?? '',
546
+ }
547
+ if (!isUndefined(text.draggable)) {
548
+ textConfig.draggable = text.draggable
549
+ }
550
+ if (!isUndefined(text.editable)) {
551
+ textConfig.editable = text.editable
552
+ }
520
553
  }
521
554
  }
555
+ this.text = textConfig
522
556
  }
523
-
524
557
  /**
525
558
  * 重置文本位置
526
559
  */
@@ -534,15 +567,13 @@ export class BaseEdgeModel implements IBaseEdgeModel {
534
567
  * 移动边上的文本
535
568
  */
536
569
  @action moveText(deltaX: number, deltaY: number): void {
537
- if (this.text) {
538
- const { x, y, value, draggable, editable } = this.text
539
- this.text = {
540
- value,
541
- draggable,
542
- x: x + deltaX,
543
- y: y + deltaY,
544
- editable,
545
- }
570
+ const { x, y, value, draggable, editable } = this.text
571
+ this.text = {
572
+ value,
573
+ editable,
574
+ draggable,
575
+ x: x + deltaX,
576
+ y: y + deltaY,
546
577
  }
547
578
  }
548
579
 
@@ -1,11 +1,11 @@
1
- import { cloneDeep } from 'lodash-es'
1
+ import { assign, cloneDeep } from 'lodash-es'
2
2
  import { action, observable } from 'mobx'
3
3
  import BaseEdgeModel from './BaseEdgeModel'
4
4
  import { BaseNodeModel } from '../node'
5
5
  import LogicFlow from '../../LogicFlow'
6
+ import GraphModel from '../GraphModel'
6
7
  import { ModelType } from '../../constant'
7
8
  import { getBezierControlPoints, IBezierControls } from '../../util'
8
- import GraphModel from '../GraphModel'
9
9
 
10
10
  import Point = LogicFlow.Point
11
11
  import EdgeConfig = LogicFlow.EdgeConfig
@@ -15,14 +15,11 @@ export class BezierEdgeModel extends BaseEdgeModel {
15
15
 
16
16
  offset!: number
17
17
  @observable path = ''
18
-
19
18
  constructor(data: EdgeConfig, graphModel: GraphModel) {
20
19
  super(data, graphModel)
21
-
22
20
  this.initEdgeData(data)
23
21
  this.setAttributes()
24
22
  }
25
-
26
23
  initEdgeData(data: EdgeConfig): void {
27
24
  this.offset = 100
28
25
  super.initEdgeData(data)
@@ -30,9 +27,11 @@ export class BezierEdgeModel extends BaseEdgeModel {
30
27
  getEdgeStyle() {
31
28
  const { bezier } = this.graphModel.theme
32
29
  const style = super.getEdgeStyle()
30
+ const { style: customStyle = {} } = this.properties
33
31
  return {
34
32
  ...style,
35
33
  ...cloneDeep(bezier),
34
+ ...cloneDeep(customStyle),
36
35
  }
37
36
  }
38
37
  getTextPosition(): Point {
@@ -155,7 +154,9 @@ export class BezierEdgeModel extends BaseEdgeModel {
155
154
  this.pointsList[2] = anchor
156
155
  }
157
156
  this.path = this.getPath(this.pointsList)
158
- this.setText(Object.assign({}, this.text, this.textPosition))
157
+ if (this.text?.value) {
158
+ this.setText(assign({}, this.text, this.textPosition))
159
+ }
159
160
  }
160
161
  // 获取边调整的起点
161
162
  @action
@@ -10,9 +10,11 @@ export class LineEdgeModel extends BaseEdgeModel {
10
10
  getEdgeStyle() {
11
11
  const { line } = this.graphModel.theme
12
12
  const style = super.getEdgeStyle()
13
+ const { style: customStyle = {} } = this.properties
13
14
  return {
14
15
  ...style,
15
16
  ...cloneDeep(line),
17
+ ...cloneDeep(customStyle),
16
18
  }
17
19
  }
18
20
  getTextPosition(): Point {
@@ -1,4 +1,4 @@
1
- import { cloneDeep } from 'lodash-es'
1
+ import { assign, cloneDeep } from 'lodash-es'
2
2
  import { observable, action } from 'mobx'
3
3
  import { BaseEdgeModel } from '.'
4
4
  import { BaseNodeModel, RectNodeModel, CircleNodeModel, Model } from '..'
@@ -25,7 +25,7 @@ import {
25
25
  import Point = LogicFlow.Point
26
26
  import Position = LogicFlow.Position
27
27
  import AppendConfig = LogicFlow.AppendConfig
28
- import ArchorConfig = Model.AnchorConfig
28
+ import AnchorConfig = Model.AnchorConfig
29
29
 
30
30
  export class PolylineEdgeModel extends BaseEdgeModel {
31
31
  modelType = ModelType.POLYLINE_EDGE
@@ -41,22 +41,22 @@ export class PolylineEdgeModel extends BaseEdgeModel {
41
41
  getEdgeStyle() {
42
42
  const { polyline } = this.graphModel.theme
43
43
  const style = super.getEdgeStyle()
44
+ const { style: customStyle = {} } = this.properties
44
45
  return {
45
46
  ...style,
46
47
  ...cloneDeep(polyline),
48
+ ...cloneDeep(customStyle),
47
49
  }
48
50
  }
49
51
 
50
52
  getTextPosition() {
51
- // 在文案为空的情况下,文案位置为双击位置
53
+ // 在文本为空的情况下,文本位置为双击位置
52
54
  const textValue = this.text?.value
53
55
  if (this.dbClickPosition && !textValue) {
54
56
  const { x, y } = this.dbClickPosition
55
- return {
56
- x,
57
- y,
58
- }
57
+ return { x, y }
59
58
  }
59
+ // 文本不为空或者没有双击位置时,取最长边的中点作为文本位置
60
60
  const currentPositionList = points2PointsList(this.points)
61
61
  const [p1, p2] = getLongestEdge(currentPositionList)
62
62
  return {
@@ -69,9 +69,9 @@ export class PolylineEdgeModel extends BaseEdgeModel {
69
69
  getAfterAnchor(
70
70
  direction: SegmentDirection,
71
71
  position: Position,
72
- anchorList: ArchorConfig[],
72
+ anchorList: AnchorConfig[],
73
73
  ) {
74
- let anchor: ArchorConfig
74
+ let anchor: AnchorConfig
75
75
  let minDistance: number
76
76
  anchorList.forEach((item) => {
77
77
  let distanceX: number
@@ -186,7 +186,7 @@ export class PolylineEdgeModel extends BaseEdgeModel {
186
186
  direction: SegmentDirection,
187
187
  positionType: string,
188
188
  position: Position,
189
- anchorList: ArchorConfig[],
189
+ anchorList: AnchorConfig[],
190
190
  draggingPointList: Point[],
191
191
  ) {
192
192
  const pointList = draggingPointList.map((i) => i)
@@ -438,10 +438,13 @@ export class PolylineEdgeModel extends BaseEdgeModel {
438
438
  }
439
439
  this.updatePointsAfterDrag(draggingPointList)
440
440
  this.draggingPointList = draggingPointList
441
- this.setText(Object.assign({}, this.text, this.textPosition))
441
+ // TODO: 判断该逻辑是否需要
442
+ if (this.text?.value) {
443
+ this.setText(assign({}, this.text, this.textPosition))
444
+ }
442
445
  return {
443
- start: Object.assign({}, pointsList[startIndex]),
444
- end: Object.assign({}, pointsList[endIndex]),
446
+ start: assign({}, pointsList[startIndex]),
447
+ end: assign({}, pointsList[endIndex]),
445
448
  startIndex,
446
449
  endIndex,
447
450
  direction,
@@ -571,10 +574,13 @@ export class PolylineEdgeModel extends BaseEdgeModel {
571
574
  this.updatePointsAfterDrag(draggingPointList)
572
575
  this.draggingPointList = draggingPointList
573
576
  }
574
- this.setText(Object.assign({}, this.text, this.textPosition))
577
+ // TODO: 确认该判断逻辑是否需要
578
+ if (this.text?.value) {
579
+ this.setText(assign({}, this.text, this.textPosition))
580
+ }
575
581
  return {
576
- start: Object.assign({}, pointsList[startIndex]),
577
- end: Object.assign({}, pointsList[endIndex]),
582
+ start: assign({}, pointsList[startIndex]),
583
+ end: assign({}, pointsList[endIndex]),
578
584
  startIndex,
579
585
  endIndex,
580
586
  direction,
@@ -591,9 +597,9 @@ export class PolylineEdgeModel extends BaseEdgeModel {
591
597
  this.draggingPointList = []
592
598
  // 更新起终点
593
599
  const startPoint = pointsList[0]
594
- this.startPoint = Object.assign({}, startPoint)
600
+ this.startPoint = assign({}, startPoint)
595
601
  const endPoint = pointsList[pointsList.length - 1]
596
- this.endPoint = Object.assign({}, endPoint)
602
+ this.endPoint = assign({}, endPoint)
597
603
  }
598
604
  this.isDragging = false
599
605
  }
@@ -1,5 +1,5 @@
1
1
  import { action, computed, isObservable, observable, toJS } from 'mobx'
2
- import { assign, cloneDeep, has, isNil, mapKeys } from 'lodash-es'
2
+ import { assign, cloneDeep, has, isNil, mapKeys, isUndefined } from 'lodash-es'
3
3
  import { GraphModel, Model } from '..'
4
4
  import LogicFlow from '../../LogicFlow'
5
5
  import {
@@ -17,6 +17,7 @@ import {
17
17
  EventType,
18
18
  ModelType,
19
19
  OverlapMode,
20
+ TextMode,
20
21
  } from '../../constant'
21
22
  import { ResizeControl } from '../../view/Control'
22
23
  import AnchorConfig = Model.AnchorConfig
@@ -26,26 +27,30 @@ import NodeConfig = LogicFlow.NodeConfig
26
27
  import NodeData = LogicFlow.NodeData
27
28
  import Point = LogicFlow.Point
28
29
  import CommonTheme = LogicFlow.CommonTheme
30
+ import PropertiesType = LogicFlow.PropertiesType
29
31
 
30
32
  import ResizeInfo = ResizeControl.ResizeInfo
31
33
  import ResizeNodeData = ResizeControl.ResizeNodeData
32
34
  import PCTResizeParams = ResizeControl.PCTResizeParams
33
35
 
34
- export interface IBaseNodeModel extends Model.BaseModel {
36
+ export interface IBaseNodeModel<P extends PropertiesType>
37
+ extends Model.BaseModel<P> {
35
38
  /**
36
39
  * model基础类型,固定为node
37
40
  */
38
41
  readonly BaseType: ElementType.NODE
42
+ properties: P
39
43
 
40
44
  isDragging: boolean
41
45
  isShowAnchor: boolean
42
46
  getNodeStyle: () => CommonTheme
43
47
  getTextStyle: () => LogicFlow.TextNodeTheme
44
-
45
48
  setIsShowAnchor: (isShowAnchor: boolean) => void
46
49
  }
47
50
 
48
- export class BaseNodeModel implements IBaseNodeModel {
51
+ export class BaseNodeModel<P extends PropertiesType = PropertiesType>
52
+ implements IBaseNodeModel<P>
53
+ {
49
54
  readonly BaseType = ElementType.NODE
50
55
  static BaseType: ElementType = ElementType.NODE
51
56
 
@@ -54,6 +59,7 @@ export class BaseNodeModel implements IBaseNodeModel {
54
59
  @observable readonly type = ''
55
60
  @observable x = 0
56
61
  @observable y = 0
62
+ @observable textMode = TextMode.TEXT
57
63
  @observable text: TextConfig = {
58
64
  value: '',
59
65
  x: 0,
@@ -61,7 +67,7 @@ export class BaseNodeModel implements IBaseNodeModel {
61
67
  draggable: false,
62
68
  editable: true,
63
69
  }
64
- @observable properties: Record<string, unknown> = {}
70
+ @observable properties: P
65
71
  // 形状属性
66
72
  @observable private _width = 100
67
73
  public get width() {
@@ -100,8 +106,9 @@ export class BaseNodeModel implements IBaseNodeModel {
100
106
  @observable isHittable = true // 细粒度控制节点是否对用户操作进行反应
101
107
  @observable draggable = true
102
108
  @observable visible = true
103
- @observable enableRotate = true
104
- @observable enableResize = true
109
+
110
+ @observable rotatable = true // 节点可旋转
111
+ @observable resizable = true // 节点可缩放
105
112
 
106
113
  // 其它属性
107
114
  graphModel: GraphModel
@@ -137,9 +144,9 @@ export class BaseNodeModel implements IBaseNodeModel {
137
144
  hasSetSourceRules = false; // 用来限制rules的重复值
138
145
  [propName: string]: any // 支持用户自定义属性
139
146
 
140
- constructor(data: NodeConfig, graphModel: GraphModel) {
147
+ constructor(data: NodeConfig<P>, graphModel: GraphModel) {
141
148
  this.graphModel = graphModel
142
- this.properties = data.properties || {}
149
+ this.properties = data.properties ?? ({} as P)
143
150
 
144
151
  this.initNodeData(data)
145
152
  this.setAttributes()
@@ -168,9 +175,9 @@ export class BaseNodeModel implements IBaseNodeModel {
168
175
  /**
169
176
  * @overridable 可以重写
170
177
  * 初始化节点数据
171
- * initNodeData和setAttributes的区别在于
172
- * initNodeData只在节点初始化的时候调用,用于初始化节点的所有属性。
173
- * setAttributes除了初始化调用外,还会在properties发生变化了调用。
178
+ * initNodeData setAttributes 的区别在于
179
+ * initNodeData 只在节点初始化的时候调用,用于初始化节点的所有属性。
180
+ * setAttributes 除了初始化调用外,还会在 properties 发生变化了调用。
174
181
  */
175
182
  public initNodeData(data: NodeConfig) {
176
183
  if (!data.properties) {
@@ -186,7 +193,10 @@ export class BaseNodeModel implements IBaseNodeModel {
186
193
  }
187
194
 
188
195
  this.formatText(data)
189
- assign(this, pickNodeConfig(data)) // TODO: 确认 constructor 中赋值 properties 是否必要
196
+ // 在下面又将 NodeConfig 中的数据赋值给了 this,应该会触发 setAttributes,确认是否符合预期
197
+ // TODO: 确认 constructor 中赋值 properties 是否必要,此处将 NodeConfig 中所有属性赋值给 this,包括 rotate、rotatable,resizable 等
198
+ assign(this, pickNodeConfig(data))
199
+
190
200
  const { overlapMode } = this.graphModel
191
201
  if (overlapMode === OverlapMode.INCREASE) {
192
202
  this.zIndex = data.zIndex || getZIndex()
@@ -215,31 +225,46 @@ export class BaseNodeModel implements IBaseNodeModel {
215
225
  return null
216
226
  }
217
227
 
228
+ /**
229
+ * 设置当前元素的文本模式
230
+ * @param mode
231
+ */
232
+ @action setTextMode(mode: TextMode) {
233
+ this.textMode = mode
234
+ }
235
+
218
236
  /**
219
237
  * 始化文本属性
220
238
  */
221
239
  private formatText(data: NodeConfig): void {
222
- if (!data.text) {
223
- data.text = {
224
- value: '',
225
- x: data.x,
226
- y: data.y,
227
- draggable: false,
228
- editable: true,
229
- }
230
- } else {
231
- if (typeof data.text === 'string') {
232
- data.text = {
233
- value: data.text,
234
- x: data.x,
235
- y: data.y,
236
- draggable: false,
237
- editable: true,
238
- }
240
+ const { x, y, text } = data
241
+ let textConfig: TextConfig = {
242
+ value: '',
243
+ x,
244
+ y,
245
+ draggable: false,
246
+ editable: true,
247
+ }
248
+ if (text) {
249
+ if (typeof text === 'string') {
250
+ textConfig.value = text
239
251
  } else {
240
- data.text.editable = data.text.editable ?? true
252
+ textConfig = {
253
+ ...textConfig,
254
+ x: text.x ?? x,
255
+ y: text.y ?? y,
256
+ value: text.value ?? '',
257
+ }
258
+ if (!isUndefined(text.draggable)) {
259
+ textConfig.draggable = text.draggable
260
+ }
261
+ if (!isUndefined(text.editable)) {
262
+ textConfig.draggable = text.draggable
263
+ }
241
264
  }
242
265
  }
266
+
267
+ data.text = textConfig
243
268
  }
244
269
 
245
270
  /**
@@ -257,7 +282,6 @@ export class BaseNodeModel implements IBaseNodeModel {
257
282
  width,
258
283
  height,
259
284
  })
260
-
261
285
  return this.getData()
262
286
  }
263
287
 
@@ -343,7 +367,11 @@ export class BaseNodeModel implements IBaseNodeModel {
343
367
  getTextStyle() {
344
368
  // 透传 nodeText
345
369
  const { nodeText } = this.graphModel.theme
346
- return cloneDeep(nodeText)
370
+ const { textStyle = {} } = this.properties
371
+ return {
372
+ ...cloneDeep(nodeText),
373
+ ...cloneDeep(textStyle),
374
+ }
347
375
  }
348
376
 
349
377
  /**
@@ -576,10 +604,10 @@ export class BaseNodeModel implements IBaseNodeModel {
576
604
  */
577
605
  public getBounds(): Model.BoxBoundsPoint {
578
606
  return {
579
- x1: this.x - this.width / 2,
580
- y1: this.y - this.height / 2,
581
- x2: this.x + this.width / 2,
582
- y2: this.y + this.height / 2,
607
+ minX: this.x - this.width / 2,
608
+ minY: this.y - this.height / 2,
609
+ maxX: this.x + this.width / 2,
610
+ maxY: this.y + this.height / 2,
583
611
  }
584
612
  }
585
613
 
@@ -683,12 +711,9 @@ export class BaseNodeModel implements IBaseNodeModel {
683
711
  @action moveTo(x: number, y: number, isIgnoreRule = false): boolean {
684
712
  const deltaX = x - this.x
685
713
  const deltaY = y - this.y
686
- if (!isIgnoreRule && !this.isAllowMoveNode(deltaX, deltaY)) {
687
- return false
688
- }
689
- if (this.text) {
690
- this.text && this.moveText(deltaX, deltaY)
691
- }
714
+ if (!isIgnoreRule && !this.isAllowMoveNode(deltaX, deltaY)) return false
715
+
716
+ this.text && this.moveText(deltaX, deltaY)
692
717
  this.x = x
693
718
  this.y = y
694
719
  return true
@@ -725,12 +750,12 @@ export class BaseNodeModel implements IBaseNodeModel {
725
750
  this.isShowAnchor = flag
726
751
  }
727
752
 
728
- @action setEnableRotate(flag = true): void {
729
- this.enableRotate = flag
753
+ @action setRotatable(flag = true): void {
754
+ this.rotatable = flag
730
755
  }
731
756
 
732
- @action setEnableResize(flag = true): void {
733
- this.enableResize = flag
757
+ @action setResizable(flag = true): void {
758
+ this.resizable = flag
734
759
  }
735
760
 
736
761
  @action setHitable(flag = true): void {