@logicflow/core 2.0.0-beta.0 → 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 (479) hide show
  1. package/.turbo/turbo-build$colon$dev.log +2 -2
  2. package/.turbo/turbo-build.log +16 -22
  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 +32 -0
  6. package/dist/index.min.js.map +1 -0
  7. package/es/LogicFlow.d.ts +88 -40
  8. package/es/LogicFlow.js +38 -33
  9. package/es/LogicFlow.js.map +1 -1
  10. package/es/algorithm/edge.js.map +1 -1
  11. package/es/algorithm/index.d.ts +2 -0
  12. package/es/algorithm/index.js +2 -0
  13. package/es/algorithm/index.js.map +1 -1
  14. package/es/algorithm/outline.d.ts +1 -1
  15. package/es/common/drag.d.ts +51 -0
  16. package/es/common/drag.js +145 -0
  17. package/es/common/drag.js.map +1 -0
  18. package/es/common/history.d.ts +28 -0
  19. package/es/common/history.js +92 -0
  20. package/es/common/history.js.map +1 -0
  21. package/es/common/index.d.ts +5 -0
  22. package/es/common/index.js +6 -0
  23. package/es/common/index.js.map +1 -0
  24. package/es/common/keyboard.d.ts +34 -0
  25. package/es/common/keyboard.js +80 -0
  26. package/es/common/keyboard.js.map +1 -0
  27. package/es/common/matrix.d.ts +30 -0
  28. package/es/common/matrix.js +155 -0
  29. package/es/common/matrix.js.map +1 -0
  30. package/es/common/vector.d.ts +23 -0
  31. package/es/common/vector.js +97 -0
  32. package/es/common/vector.js.map +1 -0
  33. package/es/constant/index.d.ts +39 -2
  34. package/es/constant/index.js +41 -1
  35. package/es/constant/index.js.map +1 -1
  36. package/es/event/eventArgs.d.ts +103 -25
  37. package/es/event/eventEmitter.d.ts +2 -2
  38. package/es/event/eventEmitter.js +0 -1
  39. package/es/event/eventEmitter.js.map +1 -1
  40. package/es/index.d.ts +6 -1
  41. package/es/index.js +6 -1
  42. package/es/index.js.map +1 -1
  43. package/es/keyboard/index.d.ts +1 -0
  44. package/es/keyboard/index.js +1 -0
  45. package/es/keyboard/index.js.map +1 -1
  46. package/es/keyboard/shortcut.d.ts +8 -0
  47. package/es/keyboard/shortcut.js +70 -8
  48. package/es/keyboard/shortcut.js.map +1 -1
  49. package/es/model/BaseModel.d.ts +16 -7
  50. package/es/model/EditConfigModel.d.ts +97 -36
  51. package/es/model/EditConfigModel.js +169 -82
  52. package/es/model/EditConfigModel.js.map +1 -1
  53. package/es/model/GraphModel.d.ts +36 -14
  54. package/es/model/GraphModel.js +60 -10
  55. package/es/model/GraphModel.js.map +1 -1
  56. package/es/model/SnaplineModel.d.ts +2 -0
  57. package/es/model/TransformModel.js +1 -1
  58. package/es/model/TransformModel.js.map +1 -1
  59. package/es/model/edge/BaseEdgeModel.d.ts +21 -17
  60. package/es/model/edge/BaseEdgeModel.js +64 -42
  61. package/es/model/edge/BaseEdgeModel.js.map +1 -1
  62. package/es/model/edge/BezierEdgeModel.d.ts +5 -3
  63. package/es/model/edge/BezierEdgeModel.js +7 -3
  64. package/es/model/edge/BezierEdgeModel.js.map +1 -1
  65. package/es/model/edge/LineEdgeModel.d.ts +2 -0
  66. package/es/model/edge/LineEdgeModel.js +2 -1
  67. package/es/model/edge/LineEdgeModel.js.map +1 -1
  68. package/es/model/edge/PolylineEdgeModel.d.ts +5 -3
  69. package/es/model/edge/PolylineEdgeModel.js +22 -15
  70. package/es/model/edge/PolylineEdgeModel.js.map +1 -1
  71. package/es/model/node/BaseNodeModel.d.ts +42 -14
  72. package/es/model/node/BaseNodeModel.js +62 -48
  73. package/es/model/node/BaseNodeModel.js.map +1 -1
  74. package/es/model/node/CircleNodeModel.d.ts +4 -3
  75. package/es/model/node/CircleNodeModel.js +4 -7
  76. package/es/model/node/CircleNodeModel.js.map +1 -1
  77. package/es/model/node/DiamondNodeModel.d.ts +5 -4
  78. package/es/model/node/DiamondNodeModel.js +4 -6
  79. package/es/model/node/DiamondNodeModel.js.map +1 -1
  80. package/es/model/node/EllipseNodeModel.d.ts +5 -4
  81. package/es/model/node/EllipseNodeModel.js +4 -6
  82. package/es/model/node/EllipseNodeModel.js.map +1 -1
  83. package/es/model/node/HtmlNodeModel.d.ts +4 -5
  84. package/es/model/node/HtmlNodeModel.js +2 -12
  85. package/es/model/node/HtmlNodeModel.js.map +1 -1
  86. package/es/model/node/PolygonNodeModel.d.ts +5 -4
  87. package/es/model/node/PolygonNodeModel.js +4 -7
  88. package/es/model/node/PolygonNodeModel.js.map +1 -1
  89. package/es/model/node/RectNodeModel.d.ts +7 -5
  90. package/es/model/node/RectNodeModel.js +10 -7
  91. package/es/model/node/RectNodeModel.js.map +1 -1
  92. package/es/model/node/TextNodeModel.d.ts +17 -9
  93. package/es/model/node/TextNodeModel.js +2 -1
  94. package/es/model/node/TextNodeModel.js.map +1 -1
  95. package/es/options.d.ts +11 -14
  96. package/es/options.js +3 -42
  97. package/es/options.js.map +1 -1
  98. package/es/tool/MultipleSelectTool.d.ts +1 -1
  99. package/es/tool/MultipleSelectTool.js +5 -5
  100. package/es/tool/MultipleSelectTool.js.map +1 -1
  101. package/es/tool/TextEditTool.d.ts +3 -3
  102. package/es/tool/TextEditTool.js +2 -2
  103. package/es/tool/TextEditTool.js.map +1 -1
  104. package/es/tool/index.d.ts +24 -2
  105. package/es/tool/index.js +82 -2
  106. package/es/tool/index.js.map +1 -1
  107. package/es/util/drag.d.ts +5 -5
  108. package/es/util/drag.js +3 -1
  109. package/es/util/drag.js.map +1 -1
  110. package/es/util/edge.d.ts +9 -2
  111. package/es/util/edge.js +23 -12
  112. package/es/util/edge.js.map +1 -1
  113. package/es/util/index.d.ts +1 -0
  114. package/es/util/index.js +1 -0
  115. package/es/util/index.js.map +1 -1
  116. package/es/util/node.d.ts +8 -7
  117. package/es/util/node.js +26 -7
  118. package/es/util/node.js.map +1 -1
  119. package/es/util/resize.d.ts +32 -0
  120. package/es/util/resize.js +197 -0
  121. package/es/util/resize.js.map +1 -0
  122. package/es/view/Anchor.d.ts +6 -7
  123. package/es/view/Anchor.js +6 -3
  124. package/es/view/Anchor.js.map +1 -1
  125. package/es/view/Control.d.ts +1 -1
  126. package/es/view/Control.js +88 -39
  127. package/es/view/Control.js.map +1 -1
  128. package/es/view/Graph.d.ts +5 -1
  129. package/es/view/Graph.js +45 -5
  130. package/es/view/Graph.js.map +1 -1
  131. package/es/view/Rotate.js +2 -1
  132. package/es/view/Rotate.js.map +1 -1
  133. package/es/view/behavior/index.d.ts +2 -0
  134. package/es/view/behavior/index.js +3 -0
  135. package/es/view/behavior/index.js.map +1 -0
  136. package/es/view/behavior/snapline.d.ts +3 -0
  137. package/es/{tool → view/behavior}/snapline.js +0 -1
  138. package/es/view/behavior/snapline.js.map +1 -0
  139. package/es/view/edge/AdjustPoint.js +12 -23
  140. package/es/view/edge/AdjustPoint.js.map +1 -1
  141. package/es/view/edge/BaseEdge.d.ts +2 -2
  142. package/es/view/edge/BaseEdge.js +30 -22
  143. package/es/view/edge/BaseEdge.js.map +1 -1
  144. package/es/view/node/BaseNode.d.ts +4 -4
  145. package/es/view/node/BaseNode.js +33 -24
  146. package/es/view/node/BaseNode.js.map +1 -1
  147. package/es/view/node/CircleNode.d.ts +1 -1
  148. package/es/view/node/CircleNode.js.map +1 -1
  149. package/es/view/node/DiamondNode.d.ts +1 -1
  150. package/es/view/node/DiamondNode.js.map +1 -1
  151. package/es/view/node/EllipseNode.d.ts +1 -1
  152. package/es/view/node/EllipseNode.js.map +1 -1
  153. package/es/view/node/HtmlNode.d.ts +1 -1
  154. package/es/view/node/HtmlNode.js +2 -2
  155. package/es/view/node/HtmlNode.js.map +1 -1
  156. package/es/view/node/PolygonNode.d.ts +1 -1
  157. package/es/view/node/PolygonNode.js.map +1 -1
  158. package/es/view/node/RectNode.d.ts +1 -1
  159. package/es/view/node/RectNode.js.map +1 -1
  160. package/es/view/node/TextNode.d.ts +1 -1
  161. package/es/view/node/TextNode.js +1 -1
  162. package/es/view/node/TextNode.js.map +1 -1
  163. package/es/view/overlay/CanvasOverlay.js +5 -4
  164. package/es/view/overlay/CanvasOverlay.js.map +1 -1
  165. package/es/view/overlay/Grid.d.ts +35 -20
  166. package/es/view/overlay/Grid.js +35 -26
  167. package/es/view/overlay/Grid.js.map +1 -1
  168. package/es/view/overlay/ToolOverlay.d.ts +1 -1
  169. package/es/view/overlay/ToolOverlay.js +1 -1
  170. package/es/view/overlay/ToolOverlay.js.map +1 -1
  171. package/es/view/shape/Circle.d.ts +9 -1
  172. package/es/view/shape/Circle.js +5 -5
  173. package/es/view/shape/Circle.js.map +1 -1
  174. package/es/view/shape/Ellipse.d.ts +10 -1
  175. package/es/view/shape/Ellipse.js +5 -5
  176. package/es/view/shape/Ellipse.js.map +1 -1
  177. package/es/view/shape/Line.d.ts +14 -1
  178. package/es/view/shape/Line.js +5 -7
  179. package/es/view/shape/Line.js.map +1 -1
  180. package/es/view/shape/Path.d.ts +3 -2
  181. package/es/view/shape/Path.js +3 -3
  182. package/es/view/shape/Path.js.map +1 -1
  183. package/es/view/shape/Polygon.d.ts +5 -3
  184. package/es/view/shape/Polygon.js +6 -6
  185. package/es/view/shape/Polygon.js.map +1 -1
  186. package/es/view/shape/Polyline.d.ts +7 -1
  187. package/es/view/shape/Polyline.js +8 -6
  188. package/es/view/shape/Polyline.js.map +1 -1
  189. package/es/view/shape/Rect.d.ts +11 -13
  190. package/es/view/shape/Rect.js +6 -9
  191. package/es/view/shape/Rect.js.map +1 -1
  192. package/es/view/shape/Text.d.ts +19 -1
  193. package/es/view/shape/Text.js +28 -21
  194. package/es/view/shape/Text.js.map +1 -1
  195. package/es/view/text/BaseText.d.ts +12 -15
  196. package/es/view/text/BaseText.js +43 -29
  197. package/es/view/text/BaseText.js.map +1 -1
  198. package/es/view/text/LineText.d.ts +19 -7
  199. package/es/view/text/LineText.js +62 -54
  200. package/es/view/text/LineText.js.map +1 -1
  201. package/lib/LogicFlow.d.ts +88 -40
  202. package/lib/LogicFlow.js +40 -35
  203. package/lib/LogicFlow.js.map +1 -1
  204. package/lib/algorithm/edge.js.map +1 -1
  205. package/lib/algorithm/index.d.ts +2 -0
  206. package/lib/algorithm/index.js +17 -1
  207. package/lib/algorithm/index.js.map +1 -1
  208. package/lib/algorithm/outline.d.ts +1 -1
  209. package/lib/common/drag.d.ts +51 -0
  210. package/lib/common/drag.js +148 -0
  211. package/lib/common/drag.js.map +1 -0
  212. package/lib/common/history.d.ts +28 -0
  213. package/lib/common/history.js +95 -0
  214. package/lib/common/history.js.map +1 -0
  215. package/lib/common/index.d.ts +5 -0
  216. package/lib/common/index.js +22 -0
  217. package/lib/common/index.js.map +1 -0
  218. package/lib/common/keyboard.d.ts +34 -0
  219. package/lib/common/keyboard.js +86 -0
  220. package/lib/common/keyboard.js.map +1 -0
  221. package/lib/common/matrix.d.ts +30 -0
  222. package/lib/common/matrix.js +158 -0
  223. package/lib/common/matrix.js.map +1 -0
  224. package/lib/common/vector.d.ts +23 -0
  225. package/lib/common/vector.js +101 -0
  226. package/lib/common/vector.js.map +1 -0
  227. package/lib/constant/index.d.ts +39 -2
  228. package/lib/constant/index.js +42 -2
  229. package/lib/constant/index.js.map +1 -1
  230. package/lib/event/eventArgs.d.ts +103 -25
  231. package/lib/event/eventEmitter.d.ts +2 -2
  232. package/lib/event/eventEmitter.js +0 -1
  233. package/lib/event/eventEmitter.js.map +1 -1
  234. package/lib/index.d.ts +6 -1
  235. package/lib/index.js +7 -2
  236. package/lib/index.js.map +1 -1
  237. package/lib/keyboard/index.d.ts +1 -0
  238. package/lib/keyboard/index.js +15 -0
  239. package/lib/keyboard/index.js.map +1 -1
  240. package/lib/keyboard/shortcut.d.ts +8 -0
  241. package/lib/keyboard/shortcut.js +75 -9
  242. package/lib/keyboard/shortcut.js.map +1 -1
  243. package/lib/model/BaseModel.d.ts +16 -7
  244. package/lib/model/EditConfigModel.d.ts +97 -36
  245. package/lib/model/EditConfigModel.js +168 -81
  246. package/lib/model/EditConfigModel.js.map +1 -1
  247. package/lib/model/GraphModel.d.ts +36 -14
  248. package/lib/model/GraphModel.js +59 -9
  249. package/lib/model/GraphModel.js.map +1 -1
  250. package/lib/model/SnaplineModel.d.ts +2 -0
  251. package/lib/model/TransformModel.js +1 -1
  252. package/lib/model/TransformModel.js.map +1 -1
  253. package/lib/model/edge/BaseEdgeModel.d.ts +21 -17
  254. package/lib/model/edge/BaseEdgeModel.js +61 -39
  255. package/lib/model/edge/BaseEdgeModel.js.map +1 -1
  256. package/lib/model/edge/BezierEdgeModel.d.ts +5 -3
  257. package/lib/model/edge/BezierEdgeModel.js +6 -2
  258. package/lib/model/edge/BezierEdgeModel.js.map +1 -1
  259. package/lib/model/edge/LineEdgeModel.d.ts +2 -0
  260. package/lib/model/edge/LineEdgeModel.js +2 -1
  261. package/lib/model/edge/LineEdgeModel.js.map +1 -1
  262. package/lib/model/edge/PolylineEdgeModel.d.ts +5 -3
  263. package/lib/model/edge/PolylineEdgeModel.js +21 -14
  264. package/lib/model/edge/PolylineEdgeModel.js.map +1 -1
  265. package/lib/model/node/BaseNodeModel.d.ts +42 -14
  266. package/lib/model/node/BaseNodeModel.js +60 -46
  267. package/lib/model/node/BaseNodeModel.js.map +1 -1
  268. package/lib/model/node/CircleNodeModel.d.ts +4 -3
  269. package/lib/model/node/CircleNodeModel.js +4 -7
  270. package/lib/model/node/CircleNodeModel.js.map +1 -1
  271. package/lib/model/node/DiamondNodeModel.d.ts +5 -4
  272. package/lib/model/node/DiamondNodeModel.js +4 -6
  273. package/lib/model/node/DiamondNodeModel.js.map +1 -1
  274. package/lib/model/node/EllipseNodeModel.d.ts +5 -4
  275. package/lib/model/node/EllipseNodeModel.js +4 -6
  276. package/lib/model/node/EllipseNodeModel.js.map +1 -1
  277. package/lib/model/node/HtmlNodeModel.d.ts +4 -5
  278. package/lib/model/node/HtmlNodeModel.js +2 -12
  279. package/lib/model/node/HtmlNodeModel.js.map +1 -1
  280. package/lib/model/node/PolygonNodeModel.d.ts +5 -4
  281. package/lib/model/node/PolygonNodeModel.js +4 -7
  282. package/lib/model/node/PolygonNodeModel.js.map +1 -1
  283. package/lib/model/node/RectNodeModel.d.ts +7 -5
  284. package/lib/model/node/RectNodeModel.js +10 -7
  285. package/lib/model/node/RectNodeModel.js.map +1 -1
  286. package/lib/model/node/TextNodeModel.d.ts +17 -9
  287. package/lib/model/node/TextNodeModel.js +2 -1
  288. package/lib/model/node/TextNodeModel.js.map +1 -1
  289. package/lib/options.d.ts +11 -14
  290. package/lib/options.js +3 -42
  291. package/lib/options.js.map +1 -1
  292. package/lib/tool/MultipleSelectTool.d.ts +1 -1
  293. package/lib/tool/MultipleSelectTool.js +5 -5
  294. package/lib/tool/MultipleSelectTool.js.map +1 -1
  295. package/lib/tool/TextEditTool.d.ts +3 -3
  296. package/lib/tool/TextEditTool.js +4 -4
  297. package/lib/tool/TextEditTool.js.map +1 -1
  298. package/lib/tool/index.d.ts +24 -2
  299. package/lib/tool/index.js +85 -15
  300. package/lib/tool/index.js.map +1 -1
  301. package/lib/util/drag.d.ts +5 -5
  302. package/lib/util/drag.js +3 -1
  303. package/lib/util/drag.js.map +1 -1
  304. package/lib/util/edge.d.ts +9 -2
  305. package/lib/util/edge.js +27 -15
  306. package/lib/util/edge.js.map +1 -1
  307. package/lib/util/index.d.ts +1 -0
  308. package/lib/util/index.js +1 -0
  309. package/lib/util/index.js.map +1 -1
  310. package/lib/util/node.d.ts +8 -7
  311. package/lib/util/node.js +28 -9
  312. package/lib/util/node.js.map +1 -1
  313. package/lib/util/resize.d.ts +32 -0
  314. package/lib/util/resize.js +204 -0
  315. package/lib/util/resize.js.map +1 -0
  316. package/lib/view/Anchor.d.ts +6 -7
  317. package/lib/view/Anchor.js +5 -2
  318. package/lib/view/Anchor.js.map +1 -1
  319. package/lib/view/Control.d.ts +1 -1
  320. package/lib/view/Control.js +87 -38
  321. package/lib/view/Control.js.map +1 -1
  322. package/lib/view/Graph.d.ts +5 -1
  323. package/lib/view/Graph.js +44 -4
  324. package/lib/view/Graph.js.map +1 -1
  325. package/lib/view/Rotate.js +2 -1
  326. package/lib/view/Rotate.js.map +1 -1
  327. package/lib/view/behavior/index.d.ts +2 -0
  328. package/lib/view/behavior/index.js +19 -0
  329. package/lib/view/behavior/index.js.map +1 -0
  330. package/lib/view/behavior/snapline.d.ts +3 -0
  331. package/lib/{tool → view/behavior}/snapline.js +0 -1
  332. package/lib/view/behavior/snapline.js.map +1 -0
  333. package/lib/view/edge/AdjustPoint.js +11 -22
  334. package/lib/view/edge/AdjustPoint.js.map +1 -1
  335. package/lib/view/edge/BaseEdge.d.ts +2 -2
  336. package/lib/view/edge/BaseEdge.js +29 -21
  337. package/lib/view/edge/BaseEdge.js.map +1 -1
  338. package/lib/view/node/BaseNode.d.ts +4 -4
  339. package/lib/view/node/BaseNode.js +32 -23
  340. package/lib/view/node/BaseNode.js.map +1 -1
  341. package/lib/view/node/CircleNode.d.ts +1 -1
  342. package/lib/view/node/CircleNode.js.map +1 -1
  343. package/lib/view/node/DiamondNode.d.ts +1 -1
  344. package/lib/view/node/DiamondNode.js.map +1 -1
  345. package/lib/view/node/EllipseNode.d.ts +1 -1
  346. package/lib/view/node/EllipseNode.js.map +1 -1
  347. package/lib/view/node/HtmlNode.d.ts +1 -1
  348. package/lib/view/node/HtmlNode.js +2 -2
  349. package/lib/view/node/HtmlNode.js.map +1 -1
  350. package/lib/view/node/PolygonNode.d.ts +1 -1
  351. package/lib/view/node/PolygonNode.js.map +1 -1
  352. package/lib/view/node/RectNode.d.ts +1 -1
  353. package/lib/view/node/RectNode.js.map +1 -1
  354. package/lib/view/node/TextNode.d.ts +1 -1
  355. package/lib/view/node/TextNode.js +1 -1
  356. package/lib/view/node/TextNode.js.map +1 -1
  357. package/lib/view/overlay/CanvasOverlay.js +5 -4
  358. package/lib/view/overlay/CanvasOverlay.js.map +1 -1
  359. package/lib/view/overlay/Grid.d.ts +35 -20
  360. package/lib/view/overlay/Grid.js +35 -26
  361. package/lib/view/overlay/Grid.js.map +1 -1
  362. package/lib/view/overlay/ToolOverlay.d.ts +1 -1
  363. package/lib/view/overlay/ToolOverlay.js +1 -1
  364. package/lib/view/overlay/ToolOverlay.js.map +1 -1
  365. package/lib/view/shape/Circle.d.ts +9 -1
  366. package/lib/view/shape/Circle.js +5 -5
  367. package/lib/view/shape/Circle.js.map +1 -1
  368. package/lib/view/shape/Ellipse.d.ts +10 -1
  369. package/lib/view/shape/Ellipse.js +5 -5
  370. package/lib/view/shape/Ellipse.js.map +1 -1
  371. package/lib/view/shape/Line.d.ts +14 -1
  372. package/lib/view/shape/Line.js +5 -7
  373. package/lib/view/shape/Line.js.map +1 -1
  374. package/lib/view/shape/Path.d.ts +3 -2
  375. package/lib/view/shape/Path.js +3 -3
  376. package/lib/view/shape/Path.js.map +1 -1
  377. package/lib/view/shape/Polygon.d.ts +5 -3
  378. package/lib/view/shape/Polygon.js +6 -6
  379. package/lib/view/shape/Polygon.js.map +1 -1
  380. package/lib/view/shape/Polyline.d.ts +7 -1
  381. package/lib/view/shape/Polyline.js +8 -6
  382. package/lib/view/shape/Polyline.js.map +1 -1
  383. package/lib/view/shape/Rect.d.ts +11 -13
  384. package/lib/view/shape/Rect.js +6 -9
  385. package/lib/view/shape/Rect.js.map +1 -1
  386. package/lib/view/shape/Text.d.ts +19 -1
  387. package/lib/view/shape/Text.js +29 -21
  388. package/lib/view/shape/Text.js.map +1 -1
  389. package/lib/view/text/BaseText.d.ts +12 -15
  390. package/lib/view/text/BaseText.js +46 -29
  391. package/lib/view/text/BaseText.js.map +1 -1
  392. package/lib/view/text/LineText.d.ts +19 -7
  393. package/lib/view/text/LineText.js +62 -57
  394. package/lib/view/text/LineText.js.map +1 -1
  395. package/package.json +5 -4
  396. package/src/LogicFlow.tsx +163 -79
  397. package/src/algorithm/edge.ts +1 -0
  398. package/src/algorithm/index.ts +2 -0
  399. package/src/algorithm/outline.ts +2 -2
  400. package/src/common/drag.ts +219 -0
  401. package/src/common/history.ts +108 -0
  402. package/src/common/index.ts +6 -0
  403. package/src/common/keyboard.ts +108 -0
  404. package/src/common/matrix.ts +122 -0
  405. package/src/common/vector.ts +93 -0
  406. package/src/constant/index.ts +43 -1
  407. package/src/event/eventArgs.ts +173 -34
  408. package/src/event/eventEmitter.ts +2 -3
  409. package/src/index.ts +6 -1
  410. package/src/keyboard/index.ts +2 -0
  411. package/src/keyboard/shortcut.ts +79 -8
  412. package/src/model/BaseModel.ts +18 -7
  413. package/src/model/EditConfigModel.ts +209 -97
  414. package/src/model/GraphModel.ts +64 -9
  415. package/src/model/TransformModel.ts +1 -1
  416. package/src/model/edge/BaseEdgeModel.ts +105 -42
  417. package/src/model/edge/BezierEdgeModel.ts +7 -6
  418. package/src/model/edge/LineEdgeModel.ts +2 -0
  419. package/src/model/edge/PolylineEdgeModel.ts +24 -18
  420. package/src/model/node/BaseNodeModel.ts +72 -47
  421. package/src/model/node/CircleNodeModel.ts +8 -7
  422. package/src/model/node/DiamondNodeModel.ts +9 -6
  423. package/src/model/node/EllipseNodeModel.ts +9 -6
  424. package/src/model/node/HtmlNodeModel.ts +8 -7
  425. package/src/model/node/PolygonNodeModel.ts +9 -7
  426. package/src/model/node/RectNodeModel.ts +16 -8
  427. package/src/model/node/TextNodeModel.ts +14 -1
  428. package/src/options.ts +18 -53
  429. package/src/tool/MultipleSelectTool.tsx +6 -6
  430. package/src/tool/TextEditTool.tsx +3 -3
  431. package/src/tool/index.ts +96 -2
  432. package/src/util/drag.ts +22 -6
  433. package/src/util/edge.ts +39 -13
  434. package/src/util/index.ts +1 -0
  435. package/src/util/node.ts +36 -13
  436. package/src/util/resize.ts +286 -0
  437. package/src/view/Anchor.tsx +7 -5
  438. package/src/view/Control.tsx +93 -62
  439. package/src/view/Graph.tsx +23 -6
  440. package/src/view/Rotate.tsx +2 -1
  441. package/src/view/behavior/index.ts +2 -0
  442. package/src/{tool → view/behavior}/snapline.ts +3 -4
  443. package/src/view/edge/AdjustPoint.tsx +35 -49
  444. package/src/view/edge/BaseEdge.tsx +65 -45
  445. package/src/view/node/BaseNode.tsx +55 -28
  446. package/src/view/node/CircleNode.tsx +3 -1
  447. package/src/view/node/DiamondNode.tsx +3 -1
  448. package/src/view/node/EllipseNode.tsx +3 -1
  449. package/src/view/node/HtmlNode.tsx +5 -3
  450. package/src/view/node/PolygonNode.tsx +3 -1
  451. package/src/view/node/RectNode.tsx +3 -1
  452. package/src/view/node/TextNode.tsx +4 -2
  453. package/src/view/overlay/CanvasOverlay.tsx +5 -4
  454. package/src/view/overlay/Grid.tsx +75 -53
  455. package/src/view/overlay/ToolOverlay.tsx +1 -1
  456. package/src/view/shape/Circle.tsx +21 -7
  457. package/src/view/shape/Ellipse.tsx +20 -6
  458. package/src/view/shape/Line.tsx +24 -9
  459. package/src/view/shape/Path.tsx +9 -6
  460. package/src/view/shape/Polygon.tsx +13 -10
  461. package/src/view/shape/Polyline.tsx +20 -8
  462. package/src/view/shape/Rect.tsx +19 -19
  463. package/src/view/shape/Text.tsx +64 -33
  464. package/src/view/text/BaseText.tsx +76 -42
  465. package/src/view/text/LineText.tsx +94 -80
  466. package/tsconfig.json +1 -1
  467. package/dist/index.js +0 -26
  468. package/dist/index.js.map +0 -1
  469. package/es/tool/snapline.d.ts +0 -3
  470. package/es/tool/snapline.js.map +0 -1
  471. package/es/tool/tool.d.ts +0 -22
  472. package/es/tool/tool.js +0 -43
  473. package/es/tool/tool.js.map +0 -1
  474. package/lib/tool/snapline.d.ts +0 -3
  475. package/lib/tool/snapline.js.map +0 -1
  476. package/lib/tool/tool.d.ts +0 -22
  477. package/lib/tool/tool.js +0 -49
  478. package/lib/tool/tool.js.map +0 -1
  479. package/src/tool/tool.ts +0 -66
@@ -0,0 +1,286 @@
1
+ import { ResizeControl, ResizeControlIndex } from '../view/Control'
2
+ import { cloneDeep, find, forEach } from 'lodash-es'
3
+ import { BaseNodeModel, GraphModel } from '../model'
4
+ import { EventType } from '../constant'
5
+
6
+ import ResizeInfo = ResizeControl.ResizeInfo
7
+ import ResizeNodeData = ResizeControl.ResizeNodeData
8
+
9
+ /**
10
+ * 计算 Control 拖动后,节点的高度信息
11
+ * @param index
12
+ * @param resizeInfo
13
+ * @param pct
14
+ * @param freezeWidth
15
+ * @param freezeHeight
16
+ */
17
+ export const recalcResizeInfo = (
18
+ index: ResizeControlIndex,
19
+ resizeInfo: ResizeInfo,
20
+ pct = 1,
21
+ freezeWidth = false,
22
+ freezeHeight = false,
23
+ ): ResizeInfo => {
24
+ const nextResizeInfo = cloneDeep(resizeInfo)
25
+ let { deltaX, deltaY } = nextResizeInfo
26
+ const { width, height, PCTResizeInfo } = nextResizeInfo
27
+ if (PCTResizeInfo) {
28
+ const sensitivity = 4 // 越低越灵敏
29
+ let deltaScale = 0
30
+ let combineDelta = 0
31
+ switch (index) {
32
+ case ResizeControlIndex.LEFT_TOP:
33
+ combineDelta = (deltaX * -1 - deltaY) / sensitivity
34
+ break
35
+ case ResizeControlIndex.RIGHT_TOP:
36
+ combineDelta = (deltaX - deltaY) / sensitivity
37
+ break
38
+ case ResizeControlIndex.RIGHT_BOTTOM:
39
+ combineDelta = (deltaX + deltaY) / sensitivity
40
+ break
41
+ case ResizeControlIndex.LEFT_BOTTOM:
42
+ combineDelta = (deltaX * -1 + deltaY) / sensitivity
43
+ break
44
+ default:
45
+ break
46
+ }
47
+
48
+ if (combineDelta !== 0) {
49
+ deltaScale =
50
+ Math.round(
51
+ (combineDelta / PCTResizeInfo.ResizeBasis.basisHeight) * 100000,
52
+ ) / 1000
53
+ }
54
+
55
+ PCTResizeInfo.ResizePCT.widthPCT = Math.max(
56
+ Math.min(
57
+ PCTResizeInfo.ResizePCT.widthPCT + deltaScale,
58
+ PCTResizeInfo.ScaleLimit.maxScaleLimit,
59
+ ),
60
+ PCTResizeInfo.ScaleLimit.minScaleLimit,
61
+ )
62
+ PCTResizeInfo.ResizePCT.heightPCT = Math.max(
63
+ Math.min(
64
+ PCTResizeInfo.ResizePCT.heightPCT + deltaScale,
65
+ PCTResizeInfo.ScaleLimit.maxScaleLimit,
66
+ ),
67
+ PCTResizeInfo.ScaleLimit.minScaleLimit,
68
+ )
69
+
70
+ const spcWidth = Math.round(
71
+ (PCTResizeInfo.ResizePCT.widthPCT *
72
+ PCTResizeInfo.ResizeBasis.basisWidth) /
73
+ 100,
74
+ )
75
+ const spcHeight = Math.round(
76
+ (PCTResizeInfo.ResizePCT.heightPCT *
77
+ PCTResizeInfo.ResizeBasis.basisHeight) /
78
+ 100,
79
+ )
80
+
81
+ switch (index) {
82
+ case ResizeControlIndex.LEFT_TOP:
83
+ deltaX = width - spcWidth
84
+ deltaY = height - spcHeight
85
+ break
86
+ case ResizeControlIndex.RIGHT_TOP:
87
+ deltaX = spcWidth - width
88
+ deltaY = height - spcHeight
89
+ break
90
+ case ResizeControlIndex.RIGHT_BOTTOM:
91
+ deltaX = spcWidth - width
92
+ deltaY = spcHeight - height
93
+ break
94
+ case ResizeControlIndex.LEFT_BOTTOM:
95
+ deltaX = width - spcWidth
96
+ deltaY = spcHeight - height
97
+ break
98
+ default:
99
+ break
100
+ }
101
+ return nextResizeInfo
102
+ }
103
+
104
+ // 如果限制了宽/高不变,对应的 width/height 保持一致
105
+ switch (index) {
106
+ case ResizeControlIndex.LEFT_TOP:
107
+ nextResizeInfo.width = freezeWidth ? width : width - deltaX * pct
108
+ nextResizeInfo.height = freezeHeight ? height : height - deltaY * pct
109
+ break
110
+ case ResizeControlIndex.RIGHT_TOP:
111
+ nextResizeInfo.width = freezeWidth ? width : width + deltaX * pct
112
+ nextResizeInfo.height = freezeHeight ? height : height - deltaY * pct
113
+ break
114
+ case ResizeControlIndex.RIGHT_BOTTOM:
115
+ nextResizeInfo.width = freezeWidth ? width : width + deltaX * pct
116
+ nextResizeInfo.height = freezeHeight ? height : height + deltaY * pct
117
+ break
118
+ case ResizeControlIndex.LEFT_BOTTOM:
119
+ nextResizeInfo.width = freezeWidth ? width : width - deltaX * pct
120
+ nextResizeInfo.height = freezeHeight ? height : height + deltaY * pct
121
+ break
122
+ default:
123
+ break
124
+ }
125
+
126
+ return nextResizeInfo
127
+ }
128
+
129
+ export const updateEdgePointByAnchors = (
130
+ nodeModel: BaseNodeModel,
131
+ graphModel: GraphModel,
132
+ ) => {
133
+ // https://github.com/didi/LogicFlow/issues/807
134
+ // https://github.com/didi/LogicFlow/issues/875
135
+ // 之前的做法,比如Rect是使用getRectResizeEdgePoint()计算边的point缩放后的位置
136
+ // getRectResizeEdgePoint()考虑了瞄点在四条边以及在4个圆角的情况
137
+ // 使用的是一种等比例缩放的模式,比如:
138
+ // const pct = (y - beforeNode.y) / (beforeNode.height / 2 - radius)
139
+ // afterPoint.y = afterNode.y + (afterNode.height / 2 - radius) * pct
140
+ // 但是用户自定义的getDefaultAnchor()不一定是按照比例编写的
141
+ // 它可能是 x: x + 20:每次缩放都会保持在x右边20的位置,因此用户自定义瞄点时,然后产生无法跟随的问题
142
+ // 现在的做法是:直接获取用户自定义瞄点的位置,然后用这个位置作为边的新的起点,而不是自己进行计算
143
+ const { id, anchors } = nodeModel
144
+ const edges = graphModel.getNodeEdges(id)
145
+ // 更新边
146
+ forEach(edges, (edge) => {
147
+ if (edge.sourceNodeId === id) {
148
+ // 边是以该节点为 sourceNode 时
149
+ const anchorItem = find(
150
+ anchors,
151
+ (anchor) => anchor.id === edge.sourceAnchorId,
152
+ )
153
+
154
+ if (anchorItem) {
155
+ edge.updateStartPoint({
156
+ x: anchorItem.x,
157
+ y: anchorItem.y,
158
+ })
159
+ }
160
+ } else if (edge.targetNodeId === id) {
161
+ // 边是以该节点为 targetNode 时
162
+ const anchorItem = find(
163
+ anchors,
164
+ (anchor) => anchor.id === edge.targetAnchorId,
165
+ )
166
+
167
+ if (anchorItem) {
168
+ edge.updateEndPoint({
169
+ x: anchorItem.x,
170
+ y: anchorItem.y,
171
+ })
172
+ }
173
+ }
174
+ })
175
+ }
176
+
177
+ export const triggerResizeEvent = (
178
+ preNodeData: ResizeNodeData,
179
+ curNodeData: ResizeNodeData,
180
+ deltaX: number,
181
+ deltaY: number,
182
+ index: number,
183
+ nodeModel: BaseNodeModel,
184
+ graphModel: GraphModel,
185
+ ) => {
186
+ graphModel.eventCenter.emit(EventType.NODE_RESIZE, {
187
+ preData: preNodeData,
188
+ data: curNodeData,
189
+ deltaX,
190
+ deltaY,
191
+ index,
192
+ model: nodeModel,
193
+ })
194
+ }
195
+
196
+ // TODO:确认 handleResize 函数的类型定义
197
+ // export type IHandleResizeParams = {
198
+ // deltaX: number
199
+ // deltaY: number
200
+ // index: ResizeControlIndex
201
+ // nodeModel: BaseNodeModel
202
+ // graphModel: GraphModel
203
+ // cancelCallback?: () => void
204
+ // }
205
+
206
+ /**
207
+ * 处理节点的 resize 事件,提出来放到 utils 中,方便在外面(extension)中使用
208
+ * @param deltaX
209
+ * @param deltaY
210
+ * @param index
211
+ * @param nodeModel
212
+ * @param graphModel
213
+ * @param cancelCallback
214
+ */
215
+ export const handleResize = ({
216
+ deltaX,
217
+ deltaY,
218
+ index,
219
+ nodeModel,
220
+ graphModel,
221
+ cancelCallback,
222
+ }) => {
223
+ const {
224
+ r, // circle
225
+ rx, // ellipse/diamond
226
+ ry,
227
+ width, // rect/html
228
+ height,
229
+ PCTResizeInfo,
230
+
231
+ minWidth,
232
+ minHeight,
233
+ maxWidth,
234
+ maxHeight,
235
+ } = nodeModel
236
+ const isFreezeWidth = minWidth === maxWidth
237
+ const isFreezeHeight = minHeight === maxHeight
238
+
239
+ const resizeInfo = {
240
+ width: r || rx || width,
241
+ height: r || ry || height,
242
+ deltaX,
243
+ deltaY,
244
+ PCTResizeInfo,
245
+ }
246
+
247
+ const pct = r || (rx && ry) ? 1 / 2 : 1
248
+ const nextSize = recalcResizeInfo(
249
+ index,
250
+ resizeInfo,
251
+ pct,
252
+ isFreezeWidth,
253
+ isFreezeHeight,
254
+ )
255
+
256
+ // 限制放大缩小的最大最小范围
257
+ if (
258
+ nextSize.width < minWidth ||
259
+ nextSize.width > maxWidth ||
260
+ nextSize.height < minHeight ||
261
+ nextSize.height > maxHeight
262
+ ) {
263
+ // this.dragHandler.cancelDrag()
264
+ cancelCallback?.()
265
+ return
266
+ }
267
+ // 如果限制了宽高不变,对应的 x/y 不产生位移
268
+ nextSize.deltaX = isFreezeWidth ? 0 : nextSize.deltaX
269
+ nextSize.deltaY = isFreezeWidth ? 0 : nextSize.deltaY
270
+
271
+ const preNodeData = nodeModel.getData()
272
+ const curNodeData = nodeModel.resize(nextSize)
273
+
274
+ // 更新边
275
+ updateEdgePointByAnchors(nodeModel, graphModel)
276
+ // 触发 resize 事件
277
+ triggerResizeEvent(
278
+ preNodeData,
279
+ curNodeData,
280
+ deltaX,
281
+ deltaY,
282
+ index,
283
+ nodeModel,
284
+ graphModel,
285
+ )
286
+ }
@@ -6,7 +6,7 @@ import { ElementState, EventType } from '../constant'
6
6
  import { GraphModel, BaseNodeModel, Model } from '../model'
7
7
  import {
8
8
  StepDrag,
9
- formateAnchorConnectValidateData,
9
+ formatAnchorConnectValidateData,
10
10
  targetNodeInfo,
11
11
  distance,
12
12
  cancelRaf,
@@ -29,7 +29,7 @@ interface IProps {
29
29
  anchorIndex: number
30
30
  graphModel: GraphModel
31
31
  nodeModel: BaseNodeModel
32
- setHoverOFF: (e: MouseEvent) => void
32
+ setHoverOff: (e: MouseEvent) => void
33
33
  }
34
34
 
35
35
  interface IState {
@@ -116,7 +116,7 @@ class Anchor extends Component<IProps, IState> {
116
116
  endY: anchorData.y,
117
117
  })
118
118
  }
119
- onDragging = ({ event }) => {
119
+ onDragging = ({ event }: IDragParams) => {
120
120
  const { graphModel, nodeModel, anchorData } = this.props
121
121
  const {
122
122
  transformModel,
@@ -125,6 +125,8 @@ class Anchor extends Component<IProps, IState> {
125
125
  height,
126
126
  editConfigModel: { autoExpand, stopMoveGraph },
127
127
  } = graphModel
128
+ // TODO:确认该方法是否有影响!理论上 onDragging 时 event 必有值
129
+ if (!event) return
128
130
  const { clientX, clientY } = event
129
131
  const {
130
132
  domOverlayPosition: { x, y },
@@ -326,11 +328,11 @@ class Anchor extends Component<IProps, IState> {
326
328
  )
327
329
  this.sourceRuleResults.set(
328
330
  targetInfoId,
329
- formateAnchorConnectValidateData(sourceRuleResult),
331
+ formatAnchorConnectValidateData(sourceRuleResult),
330
332
  )
331
333
  this.targetRuleResults.set(
332
334
  targetInfoId,
333
- formateAnchorConnectValidateData(targetRuleResult),
335
+ formatAnchorConnectValidateData(targetRuleResult),
334
336
  )
335
337
  }
336
338
  const { isAllPass: isSourcePass } =
@@ -2,7 +2,7 @@ import { createElement as h, Component } from 'preact/compat'
2
2
  import { cloneDeep, find, forEach, map } from 'lodash-es'
3
3
  import { Rect } from './shape'
4
4
  import LogicFlow from '../LogicFlow'
5
- import { getNodeBBox, IDragParams, StepDrag } from '../util'
5
+ import { getNodeBBox, IDragParams, StepDrag, handleResize } from '../util'
6
6
  import { BaseNodeModel, GraphModel } from '../model'
7
7
 
8
8
  import NodeData = LogicFlow.NodeData
@@ -103,11 +103,19 @@ export class ResizeControl extends Component<
103
103
 
104
104
  triggerResizeEvent = (
105
105
  preNodeData: ResizeNodeData,
106
- nextNodeData: ResizeNodeData,
106
+ curNodeData: ResizeNodeData,
107
+ deltaX,
108
+ deltaY,
109
+ index,
110
+ nodeModel: BaseNodeModel,
107
111
  ) => {
108
112
  this.graphModel.eventCenter.emit(EventType.NODE_RESIZE, {
109
- preNodeData,
110
- nextNodeData,
113
+ preData: preNodeData,
114
+ data: curNodeData,
115
+ deltaX,
116
+ deltaY,
117
+ index,
118
+ model: nodeModel,
111
119
  })
112
120
  }
113
121
 
@@ -232,64 +240,75 @@ export class ResizeControl extends Component<
232
240
  }
233
241
 
234
242
  resizeNode = ({ deltaX, deltaY }: VectorData) => {
235
- // TODO: 调用每个节点中更新缩放时的方法 updateNode 函数,用来各节点缩放的方法
236
- // 1. 计算当前 Control 的一些信息,
237
- const {
238
- r, // circle
239
- rx, // ellipse/diamond
240
- ry,
241
- width, // rect/html
242
- height,
243
- PCTResizeInfo,
244
-
245
- minWidth,
246
- minHeight,
247
- maxWidth,
248
- maxHeight,
249
- } = this.nodeModel
250
- const isFreezeWidth = minWidth === maxWidth
251
- const isFreezeHeight = minHeight === maxHeight
252
-
253
- const resizeInfo = {
254
- width: r || rx || width,
255
- height: r || ry || height,
243
+ const { index } = this
244
+ const { model, graphModel } = this.props
245
+
246
+ // DONE: 调用每个节点中更新缩放时的方法 updateNode 函数,用来各节点缩放的方法
247
+ handleResize({
256
248
  deltaX,
257
249
  deltaY,
258
- PCTResizeInfo,
259
- }
260
-
261
- const pct = r || (rx && ry) ? 1 / 2 : 1
262
- const nextSize = this.recalcResizeInfo(
263
- this.index,
264
- resizeInfo,
265
- pct,
266
- isFreezeWidth,
267
- isFreezeHeight,
268
- )
269
-
270
- // 限制放大缩小的最大最小范围
271
- if (
272
- nextSize.width < minWidth ||
273
- nextSize.width > maxWidth ||
274
- nextSize.height < minHeight ||
275
- nextSize.height > maxHeight
276
- ) {
277
- this.dragHandler.cancelDrag()
278
- return
279
- }
280
- // 如果限制了宽高不变,对应的 x/y 不产生位移
281
- nextSize.deltaX = isFreezeWidth ? 0 : nextSize.deltaX
282
- nextSize.deltaY = isFreezeWidth ? 0 : nextSize.deltaY
283
-
284
- const preNodeData = this.nodeModel.getData()
285
- const nextNodeData = this.nodeModel.resize(nextSize)
286
-
287
- console.log('nextNodeData ===>>>', nextNodeData)
288
-
289
- // 更新边
290
- this.updateEdgePointByAnchors()
291
- // 触发 resize 事件
292
- this.triggerResizeEvent(preNodeData, nextNodeData)
250
+ index,
251
+ nodeModel: model,
252
+ graphModel,
253
+ cancelCallback: () => {
254
+ this.dragHandler.cancelDrag()
255
+ },
256
+ })
257
+ // 1. 计算当前 Control 的一些信息,
258
+ // const {
259
+ // r, // circle
260
+ // rx, // ellipse/diamond
261
+ // ry,
262
+ // width, // rect/html
263
+ // height,
264
+ // PCTResizeInfo,
265
+ //
266
+ // minWidth,
267
+ // minHeight,
268
+ // maxWidth,
269
+ // maxHeight,
270
+ // } = this.nodeModel
271
+ // const isFreezeWidth = minWidth === maxWidth
272
+ // const isFreezeHeight = minHeight === maxHeight
273
+ //
274
+ // const resizeInfo = {
275
+ // width: r || rx || width,
276
+ // height: r || ry || height,
277
+ // deltaX,
278
+ // deltaY,
279
+ // PCTResizeInfo,
280
+ // }
281
+ //
282
+ // const pct = r || (rx && ry) ? 1 / 2 : 1
283
+ // const nextSize = this.recalcResizeInfo(
284
+ // this.index,
285
+ // resizeInfo,
286
+ // pct,
287
+ // isFreezeWidth,
288
+ // isFreezeHeight,
289
+ // )
290
+ //
291
+ // // 限制放大缩小的最大最小范围
292
+ // if (
293
+ // nextSize.width < minWidth ||
294
+ // nextSize.width > maxWidth ||
295
+ // nextSize.height < minHeight ||
296
+ // nextSize.height > maxHeight
297
+ // ) {
298
+ // this.dragHandler.cancelDrag()
299
+ // return
300
+ // }
301
+ // // 如果限制了宽高不变,对应的 x/y 不产生位移
302
+ // nextSize.deltaX = isFreezeWidth ? 0 : nextSize.deltaX
303
+ // nextSize.deltaY = isFreezeWidth ? 0 : nextSize.deltaY
304
+ //
305
+ // const preNodeData = this.nodeModel.getData()
306
+ // const curNodeData = this.nodeModel.resize(nextSize)
307
+ //
308
+ // // 更新边
309
+ // this.updateEdgePointByAnchors()
310
+ // // 触发 resize 事件
311
+ // this.triggerResizeEvent(preNodeData, curNodeData, deltaX, deltaY, this.index, this.nodeModel)
293
312
  }
294
313
 
295
314
  onDragging = ({ deltaX, deltaY }: IDragParams) => {
@@ -304,6 +323,7 @@ export class ResizeControl extends Component<
304
323
 
305
324
  // 由于将拖拽放大缩小改成丝滑模式,这个时候需要再拖拽结束的时候,将节点的位置更新到 grid 上。
306
325
  onDragEnd = () => {
326
+ // TODO: 确认下面该代码是否还需要(应该是默认让节点拖拽以 gridSize 为步长移动)
307
327
  // const { gridSize = 1 } = this.graphModel
308
328
  // const x = gridSize * Math.round(this.nodeModel.x / gridSize)
309
329
  // const y = gridSize * Math.round(this.nodeModel.y / gridSize)
@@ -319,14 +339,25 @@ export class ResizeControl extends Component<
319
339
 
320
340
  render(): h.JSX.Element {
321
341
  const { x, y, direction, model } = this.props
322
- const style = model.getResizeControlStyle()
342
+ const { width, height, ...restStyle } = model.getResizeControlStyle()
323
343
  return (
324
344
  <g className={`lf-resize-control lf-resize-control-${direction}`}>
325
345
  <Rect
326
346
  className="lf-resize-control-content"
327
347
  x={x}
328
348
  y={y}
329
- {...style}
349
+ width={width ?? 7}
350
+ height={height ?? 7}
351
+ {...restStyle}
352
+ />
353
+ <Rect
354
+ className="lf-resize-control-content"
355
+ x={x}
356
+ y={y}
357
+ width={25}
358
+ height={25}
359
+ fill="transparent"
360
+ stroke="transparent"
330
361
  onMouseDown={this.dragHandler.handleMouseDown}
331
362
  />
332
363
  </g>
@@ -1,5 +1,5 @@
1
1
  import { Component, ComponentType } from 'preact/compat'
2
- import { map } from 'lodash-es'
2
+ import { map, throttle } from 'lodash-es'
3
3
  import {
4
4
  CanvasOverlay,
5
5
  ToolOverlay,
@@ -12,14 +12,15 @@ import {
12
12
  } from './overlay'
13
13
  import DnD from './behavior/dnd'
14
14
  import { observer } from '..'
15
+ import Tool from '../tool'
15
16
  import { Options as LFOptions } from '../options'
16
- import Tool from '../tool/tool'
17
17
  import {
18
18
  GraphModel,
19
19
  BaseEdgeModel,
20
20
  BaseNodeModel,
21
21
  SnaplineModel,
22
22
  } from '../model'
23
+ import { EventType } from '../constant'
23
24
 
24
25
  type IGraphProps = {
25
26
  getView: (type: string) => ComponentType<any> | undefined
@@ -37,6 +38,23 @@ type ContainerStyle = {
37
38
 
38
39
  @observer
39
40
  class Graph extends Component<IGraphProps> {
41
+ handleResize = () => {
42
+ this.props.graphModel.resize()
43
+ }
44
+
45
+ componentDidMount() {
46
+ window.addEventListener('resize', throttle(this.handleResize, 200))
47
+ }
48
+
49
+ componentDidUpdate() {
50
+ const data = this.props.graphModel.modelToGraphData()
51
+ this.props.graphModel.eventCenter.emit(EventType.GRAPH_UPDATED, { data })
52
+ }
53
+
54
+ componentWillUnmount() {
55
+ window.removeEventListener('resize', throttle(this.handleResize, 200))
56
+ }
57
+
40
58
  getComponent(
41
59
  model: BaseEdgeModel | BaseNodeModel,
42
60
  graphModel: GraphModel,
@@ -68,12 +86,11 @@ class Graph extends Component<IGraphProps> {
68
86
  if (options.height) {
69
87
  style.height = `${graphModel.height}px`
70
88
  }
71
- const grid = options.grid as any // TODO: fix type
89
+ const grid = options.grid && Grid.getGridOptions(options.grid)
72
90
  const { fakeNode, editConfigModel } = graphModel
73
91
  const { adjustEdge } = editConfigModel
74
-
75
92
  return (
76
- <div className="lf-graph" flow-id={graphModel.flowId} style={style}>
93
+ <div className="lf-graph" flow-id={graphModel.flowId}>
77
94
  <CanvasOverlay graphModel={graphModel} dnd={dnd}>
78
95
  <g className="lf-base">
79
96
  {map(graphModel.sortElements, (nodeModel) =>
@@ -95,7 +112,7 @@ class Graph extends Component<IGraphProps> {
95
112
  {options.background && (
96
113
  <BackgroundOverlay background={options.background} />
97
114
  )}
98
- {options.grid && <Grid {...grid} graphModel={graphModel} />}
115
+ {grid && <Grid {...grid} graphModel={graphModel} />}
99
116
  </div>
100
117
  )
101
118
  }
@@ -83,7 +83,8 @@ class RotateControlPoint extends Component<IRotateControlProps> {
83
83
 
84
84
  eventCenter.emit(EventType.NODE_ROTATE, {
85
85
  e: event,
86
- nodeModel,
86
+ model: nodeModel,
87
+ data: nodeModel.getData(),
87
88
  })
88
89
  }
89
90
 
@@ -0,0 +1,2 @@
1
+ export * from './dnd'
2
+ export * from './snapline'
@@ -1,13 +1,12 @@
1
- import EventEmitter from '../event/eventEmitter'
2
- import SnaplineModel from '../model/SnaplineModel'
1
+ import EventEmitter from '../../event/eventEmitter'
2
+ import SnaplineModel from '../../model/SnaplineModel'
3
3
 
4
4
  export function snapline(
5
5
  eventCenter: EventEmitter,
6
6
  snaplineModel: SnaplineModel,
7
7
  ): void {
8
8
  // 节点拖动时启动对齐线计算
9
- eventCenter.on('node:mousemove', ({ data }: any) => {
10
- // TODO: 取消注释,定义 data 类型,解决编译问题
9
+ eventCenter.on('node:mousemove', ({ data }) => {
11
10
  snaplineModel.setNodeSnapLine(data)
12
11
  })
13
12
  // 节点拖动结束时,对齐线消失