@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
@@ -4,7 +4,7 @@ import { GraphModel, BaseNodeModel, BaseEdgeModel, Model } from '../../model'
4
4
  import {
5
5
  IDragParams,
6
6
  StepDrag,
7
- formateAnchorConnectValidateData,
7
+ formatAnchorConnectValidateData,
8
8
  targetNodeInfo,
9
9
  NodeContaint,
10
10
  } from '../../util'
@@ -125,54 +125,40 @@ export class AdjustPoint extends Component<IProps, IState> {
125
125
  )
126
126
  // 如果一定的坐标能够找到目标节点,预结算当前节点与目标节点的路径进行展示
127
127
  if (info && info.node && this.isAllowAdjust(info).pass) {
128
- let params: {
129
- startPoint: Point
130
- endPoint: Point
131
- sourceNode: BaseNodeModel
132
- targetNode: BaseNodeModel
133
- }
134
128
  const { startPoint, endPoint, sourceNode, targetNode } = edgeModel
135
- if (type === AdjustType.SOURCE) {
136
- params = {
137
- startPoint: {
138
- x: info.anchor.x,
139
- y: info.anchor.y,
140
- },
141
- endPoint: {
142
- x: endPoint.x,
143
- y: endPoint.y,
144
- },
145
- sourceNode: info.node,
146
- targetNode,
147
- }
148
- } else if (type === AdjustType.TARGET) {
149
- params = {
150
- startPoint: {
151
- x: startPoint.x,
152
- y: startPoint.y,
153
- },
154
- endPoint: {
155
- x: info.anchor.x,
156
- y: info.anchor.y,
157
- },
158
- sourceNode,
159
- targetNode: info.node,
160
- }
161
- }
162
- edgeModel.updateAfterAdjustStartAndEnd(params!)
163
- } else if (type === AdjustType.SOURCE) {
164
- // 如果没有找到目标节点,更显起终点为当前坐标
165
- edgeModel.updateStartPoint({
166
- x,
167
- y,
168
- })
169
- } else if (type === AdjustType.TARGET) {
170
- edgeModel.updateEndPoint({
171
- x,
172
- y,
173
- })
129
+ const params =
130
+ type === AdjustType.SOURCE
131
+ ? {
132
+ startPoint: {
133
+ x: info.anchor.x,
134
+ y: info.anchor.y,
135
+ },
136
+ endPoint: {
137
+ x: endPoint.x,
138
+ y: endPoint.y,
139
+ },
140
+ sourceNode: info.node,
141
+ targetNode,
142
+ }
143
+ : {
144
+ startPoint: {
145
+ x: startPoint.x,
146
+ y: startPoint.y,
147
+ },
148
+ endPoint: {
149
+ x: info.anchor.x,
150
+ y: info.anchor.y,
151
+ },
152
+ sourceNode,
153
+ targetNode: info.node,
154
+ }
155
+ edgeModel.updateAfterAdjustStartAndEnd(params)
156
+ } else {
157
+ // 如果没有找到目标节点,更新起终点为当前坐标
158
+ type === AdjustType.SOURCE
159
+ ? edgeModel.updateStartPoint({ x, y })
160
+ : edgeModel.updateEndPoint({ x, y })
174
161
  }
175
-
176
162
  if (edgeModel.text.value && editConfigModel.adjustEdge) {
177
163
  edgeModel.setText(
178
164
  Object.assign({}, edgeModel.text, edgeModel.textPosition),
@@ -394,11 +380,11 @@ export class AdjustPoint extends Component<IProps, IState> {
394
380
  )
395
381
  this.sourceRuleResults.set(
396
382
  targetInfoId,
397
- formateAnchorConnectValidateData(sourceRuleResult),
383
+ formatAnchorConnectValidateData(sourceRuleResult),
398
384
  )
399
385
  this.targetRuleResults.set(
400
386
  targetInfoId,
401
- formateAnchorConnectValidateData(targetRuleResult),
387
+ formatAnchorConnectValidateData(targetRuleResult),
402
388
  )
403
389
  }
404
390
  const { isAllPass: isSourcePass, msg: sourceMsg } =
@@ -3,7 +3,7 @@ import { Circle } from '../shape'
3
3
  import { LineText } from '../text'
4
4
  import LogicFlow from '../../LogicFlow'
5
5
  import { GraphModel, BaseEdgeModel, PolylineEdgeModel } from '../../model'
6
- import { ElementState, EventType, ModelType } from '../../constant'
6
+ import { ElementState, EventType, ModelType, TextMode } from '../../constant'
7
7
  import {
8
8
  isMultipleSelect,
9
9
  getClosestPointOfPolyline,
@@ -56,24 +56,31 @@ export abstract class BaseEdge<P extends IProps> extends Component<
56
56
  */
57
57
  getText(): h.JSX.Element | null {
58
58
  const { model, graphModel } = this.props
59
- // 文本被编辑的时候,显示编辑框,不显示文本。
60
- if (model.state === ElementState.TEXT_EDIT) {
61
- return null
62
- }
63
- let draggable = false
64
59
  const { editConfigModel } = graphModel
65
- if (model.text.draggable || editConfigModel.edgeTextDraggable) {
66
- draggable = true
60
+
61
+ // 边文本模式非 TEXT 时,不显示文本
62
+ if (editConfigModel.edgeTextMode !== TextMode.TEXT) return null
63
+ // 文本被编辑的时候,显示编辑框,不显示文本。
64
+ if (model.state === ElementState.TEXT_EDIT) return null
65
+
66
+ if (model.text) {
67
+ let draggable = false
68
+ if (editConfigModel.edgeTextDraggable && model.text.draggable) {
69
+ draggable = true
70
+ }
71
+ return (
72
+ <LineText
73
+ ref={this.textRef}
74
+ editable={
75
+ editConfigModel.edgeTextEdit && (model.text.editable ?? true)
76
+ }
77
+ model={model}
78
+ graphModel={graphModel}
79
+ draggable={draggable}
80
+ />
81
+ )
67
82
  }
68
- return (
69
- <LineText
70
- ref={this.textRef}
71
- editable={editConfigModel.edgeTextEdit && model.text.editable}
72
- model={model}
73
- graphModel={graphModel}
74
- draggable={draggable}
75
- />
76
- )
83
+ return null
77
84
  }
78
85
 
79
86
  /**
@@ -240,24 +247,36 @@ export abstract class BaseEdge<P extends IProps> extends Component<
240
247
  */
241
248
  private getAdjustPoints() {
242
249
  const { model, graphModel } = this.props
250
+ const {
251
+ editConfigModel: {
252
+ adjustEdgeStartAndEnd,
253
+ adjustEdgeStart,
254
+ adjustEdgeEnd,
255
+ },
256
+ } = graphModel
243
257
  const start = model.getAdjustStart()
244
258
  const end = model.getAdjustEnd()
259
+
245
260
  return (
246
261
  <g>
247
- <AdjustPoint
248
- type={AdjustType.SOURCE}
249
- {...start}
250
- getAdjustPointShape={this.getAdjustPointShape}
251
- edgeModel={model}
252
- graphModel={graphModel}
253
- />
254
- <AdjustPoint
255
- type={AdjustType.TARGET}
256
- {...end}
257
- getAdjustPointShape={this.getAdjustPointShape}
258
- edgeModel={model}
259
- graphModel={graphModel}
260
- />
262
+ {adjustEdgeStartAndEnd && adjustEdgeStart && (
263
+ <AdjustPoint
264
+ type={AdjustType.SOURCE}
265
+ {...start}
266
+ getAdjustPointShape={this.getAdjustPointShape}
267
+ edgeModel={model}
268
+ graphModel={graphModel}
269
+ />
270
+ )}
271
+ {adjustEdgeStartAndEnd && adjustEdgeEnd && (
272
+ <AdjustPoint
273
+ type={AdjustType.TARGET}
274
+ {...end}
275
+ getAdjustPointShape={this.getAdjustPointShape}
276
+ edgeModel={model}
277
+ graphModel={graphModel}
278
+ />
279
+ )}
261
280
  </g>
262
281
  )
263
282
  }
@@ -307,24 +326,24 @@ export abstract class BaseEdge<P extends IProps> extends Component<
307
326
  /**
308
327
  * 不支持重写,如果想要基于hover状态设置不同的样式,请在model中使用isHovered属性。
309
328
  */
310
- setHoverON = (ev: MouseEvent) => {
329
+ setHoverOn = (ev: MouseEvent) => {
311
330
  // ! hover多次触发, onMouseOver + onMouseEnter
312
331
  const {
313
332
  model: { isHovered },
314
333
  } = this.props
315
334
  if (isHovered) return
316
- this.textRef && this.textRef.current && this.textRef.current.setHoverON()
335
+ this.textRef && this.textRef.current && this.textRef.current.setHoverOn()
317
336
  this.handleHover(true, ev)
318
337
  }
319
338
  /**
320
339
  * 不支持重写,如果想要基于hover状态设置不同的样式,请在model中使用isHovered属性。
321
340
  */
322
- setHoverOFF = (ev: MouseEvent) => {
341
+ setHoverOff = (ev: MouseEvent) => {
323
342
  const {
324
343
  model: { isHovered },
325
344
  } = this.props
326
345
  if (!isHovered) return
327
- this.textRef && this.textRef.current && this.textRef.current.setHoverOFF()
346
+ this.textRef && this.textRef.current && this.textRef.current.setHoverOff()
328
347
  this.handleHover(false, ev)
329
348
  }
330
349
  /**
@@ -385,15 +404,17 @@ export abstract class BaseEdge<P extends IProps> extends Component<
385
404
  })
386
405
  if (isDoubleClick) {
387
406
  const { editConfigModel, textEditElement } = graphModel
407
+ const { id, text, modelType } = model
388
408
  // 当前边正在编辑,需要先重置状态才能变更文本框位置
389
- if (textEditElement && textEditElement.id === model.id) {
390
- graphModel.setElementStateById(model.id, ElementState.DEFAULT)
409
+ if (textEditElement && textEditElement.id === id) {
410
+ graphModel.setElementStateById(id, ElementState.DEFAULT)
391
411
  }
392
412
  // 边文案可编辑状态,才可以进行文案编辑
393
- if (editConfigModel.edgeTextEdit && model.text.editable) {
394
- graphModel.setElementStateById(model.id, ElementState.TEXT_EDIT)
413
+ if (editConfigModel.edgeTextEdit && text.editable) {
414
+ model.setSelected(false)
415
+ graphModel.setElementStateById(id, ElementState.TEXT_EDIT)
395
416
  }
396
- if (model.modelType === ModelType.POLYLINE_EDGE) {
417
+ if (modelType === ModelType.POLYLINE_EDGE) {
397
418
  const polylineEdgeModel = model as PolylineEdgeModel
398
419
  const {
399
420
  canvasOverlayPosition: { x, y },
@@ -401,14 +422,13 @@ export abstract class BaseEdge<P extends IProps> extends Component<
401
422
  x: e.x,
402
423
  y: e.y,
403
424
  })
404
- const crossPoint = getClosestPointOfPolyline(
425
+ polylineEdgeModel.dbClickPosition = getClosestPointOfPolyline(
405
426
  {
406
427
  x,
407
428
  y,
408
429
  },
409
430
  polylineEdgeModel.points,
410
431
  )
411
- polylineEdgeModel.dbClickPosition = crossPoint
412
432
  }
413
433
  graphModel.eventCenter.emit(EventType.EDGE_DBCLICK, {
414
434
  data: edgeData,
@@ -471,9 +491,9 @@ export abstract class BaseEdge<P extends IProps> extends Component<
471
491
  onMouseDown={this.handleMouseDown}
472
492
  onMouseUp={this.handleMouseUp}
473
493
  onContextMenu={this.handleContextMenu}
474
- onMouseOver={this.setHoverON}
475
- onMouseEnter={this.setHoverON}
476
- onMouseLeave={this.setHoverOFF}
494
+ onMouseOver={this.setHoverOn}
495
+ onMouseEnter={this.setHoverOn}
496
+ onMouseLeave={this.setHoverOff}
477
497
  >
478
498
  {this.getShape()}
479
499
  {this.getAppend()}
@@ -5,7 +5,7 @@ import Anchor from '../Anchor'
5
5
  import { BaseText } from '../text'
6
6
  import LogicFlow from '../../LogicFlow'
7
7
  import { GraphModel, BaseNodeModel, Model } from '../../model'
8
- import { ElementState, EventType } from '../../constant'
8
+ import { ElementState, EventType, TextMode } from '../../constant'
9
9
  import {
10
10
  StepDrag,
11
11
  snapToGrid,
@@ -29,7 +29,10 @@ type IState = {
29
29
  isDragging?: boolean
30
30
  }
31
31
 
32
- export abstract class BaseNode<P extends IProps> extends Component<P, IState> {
32
+ export abstract class BaseNode<P extends IProps = IProps> extends Component<
33
+ P,
34
+ IState
35
+ > {
33
36
  static isObserved: boolean = false
34
37
  static extendsKey?: string
35
38
 
@@ -106,7 +109,7 @@ export abstract class BaseNode<P extends IProps> extends Component<P, IState> {
106
109
  anchorIndex={index}
107
110
  nodeModel={model}
108
111
  graphModel={graphModel}
109
- setHoverOFF={this.setHoverOFF}
112
+ setHoverOff={this.setHoverOff}
110
113
  />
111
114
  )
112
115
  })
@@ -116,9 +119,16 @@ export abstract class BaseNode<P extends IProps> extends Component<P, IState> {
116
119
 
117
120
  getRotateControl() {
118
121
  const { model, graphModel } = this.props
119
- const { isSelected, isHitable, enableRotate, isHovered } = model
122
+ const {
123
+ editConfigModel: { isSilentMode, allowRotate },
124
+ } = graphModel
125
+ const { isSelected, isHitable, rotatable, isHovered } = model
126
+
127
+ // 合并全局 allResize 和节点自身的 resizable 配置,以节点配置高于全局配置
128
+ const canRotate = allowRotate && rotatable // 全局开关 > 节点配置
129
+
120
130
  const style = model.getRotateControlStyle()
121
- if (isHitable && (isSelected || isHovered) && enableRotate) {
131
+ if (!isSilentMode && isHitable && (isSelected || isHovered) && canRotate) {
122
132
  return (
123
133
  <RotateControlPoint
124
134
  graphModel={graphModel}
@@ -132,9 +142,15 @@ export abstract class BaseNode<P extends IProps> extends Component<P, IState> {
132
142
 
133
143
  getResizeControl(): h.JSX.Element | null {
134
144
  const { model, graphModel } = this.props
135
- const { isSelected, isHitable, enableResize, isHovered } = model
145
+ const {
146
+ editConfigModel: { isSilentMode, allowResize },
147
+ } = graphModel
148
+ const { isSelected, isHitable, resizable, isHovered } = model
149
+
150
+ // 合并全局 allResize 和节点自身的 resizable 配置,以节点配置高于全局配置
151
+ const canResize = allowResize && resizable // 全局开关 > 节点配置
136
152
  const style = model.getResizeControlStyle()
137
- if (isHitable && (isSelected || isHovered) && enableResize) {
153
+ if (!isSilentMode && isHitable && (isSelected || isHovered) && canResize) {
138
154
  return (
139
155
  <ResizeControlGroup
140
156
  style={style}
@@ -148,14 +164,16 @@ export abstract class BaseNode<P extends IProps> extends Component<P, IState> {
148
164
 
149
165
  getText(): h.JSX.Element | null {
150
166
  const { model, graphModel } = this.props
167
+ const { editConfigModel } = graphModel
168
+
169
+ // 当 节点文本模式非 TEXT 时,不显示文本
170
+ if (editConfigModel.nodeTextMode !== TextMode.TEXT) return null
151
171
  // 文本被编辑的时候,显示编辑框,不显示文本。
152
- if (model.state === ElementState.TEXT_EDIT) {
153
- return null
154
- }
172
+ if (model.state === ElementState.TEXT_EDIT) return null
173
+
155
174
  if (model.text) {
156
- const { editConfigModel } = graphModel
157
175
  let draggable = false
158
- if (model.text.draggable || editConfigModel.nodeTextDraggable) {
176
+ if (editConfigModel.nodeTextDraggable && model.text.draggable) {
159
177
  draggable = true
160
178
  }
161
179
  return (
@@ -189,7 +207,7 @@ export abstract class BaseNode<P extends IProps> extends Component<P, IState> {
189
207
  break
190
208
  }
191
209
  if (isDragging) {
192
- className += ' lf-isDragging'
210
+ className += ' lf-dragging'
193
211
  }
194
212
  if (isSelected) {
195
213
  className += ' lf-node-selected'
@@ -212,9 +230,9 @@ export abstract class BaseNode<P extends IProps> extends Component<P, IState> {
212
230
  }
213
231
  }
214
232
  }
233
+
215
234
  onDragging = ({ event }: IDragParams) => {
216
235
  const { model, graphModel } = this.props
217
- // const { isDragging } = model;
218
236
  const {
219
237
  editConfigModel: { stopMoveGraph, autoExpand },
220
238
  transformModel,
@@ -294,6 +312,7 @@ export abstract class BaseNode<P extends IProps> extends Component<P, IState> {
294
312
  graphModel.moveNodes(moveNodes, x - model.x, y - model.y)
295
313
  }
296
314
  }
315
+
297
316
  onDragEnd = () => {
298
317
  if (this.t) {
299
318
  cancelRaf(this.t)
@@ -301,10 +320,17 @@ export abstract class BaseNode<P extends IProps> extends Component<P, IState> {
301
320
  const { model } = this.props
302
321
  model.isDragging = false
303
322
  }
323
+ onMouseOut = (ev: MouseEvent) => {
324
+ if (isIe) {
325
+ this.setHoverOff(ev)
326
+ }
327
+ }
328
+
304
329
  handleMouseUp = () => {
305
330
  const { model } = this.props
306
331
  this.mouseUpDrag = model.isDragging
307
332
  }
333
+
308
334
  handleClick = (e: MouseEvent) => {
309
335
  // 节点拖拽进画布之后,不触发click事件相关emit
310
336
  // 点拖拽进画布没有触发mousedown事件,没有startTime,用这个值做区分
@@ -350,9 +376,11 @@ export abstract class BaseNode<P extends IProps> extends Component<P, IState> {
350
376
 
351
377
  // 不是双击的,默认都是单击
352
378
  if (isDoubleClick) {
353
- if (editConfigModel.nodeTextEdit && model.text.editable) {
354
- model.setSelected(false)
355
- graphModel.setElementStateById(model.id, ElementState.TEXT_EDIT)
379
+ if (editConfigModel.nodeTextEdit) {
380
+ if (model.text.editable) {
381
+ model.setSelected(false)
382
+ graphModel.setElementStateById(model.id, ElementState.TEXT_EDIT)
383
+ }
356
384
  }
357
385
  graphModel.eventCenter.emit(EventType.NODE_DBCLICK, eventOptions)
358
386
  } else {
@@ -360,6 +388,7 @@ export abstract class BaseNode<P extends IProps> extends Component<P, IState> {
360
388
  graphModel.eventCenter.emit(EventType.NODE_CLICK, eventOptions)
361
389
  }
362
390
  }
391
+
363
392
  handleContextMenu = (ev: MouseEvent) => {
364
393
  ev.preventDefault()
365
394
  const { model, graphModel } = this.props
@@ -385,6 +414,7 @@ export abstract class BaseNode<P extends IProps> extends Component<P, IState> {
385
414
  })
386
415
  this.toFront()
387
416
  }
417
+
388
418
  handleMouseDown = (ev: MouseEvent) => {
389
419
  const { model, graphModel } = this.props
390
420
  this.startTime = new Date().getTime()
@@ -393,9 +423,9 @@ export abstract class BaseNode<P extends IProps> extends Component<P, IState> {
393
423
  this.stepDrag && this.stepDrag.handleMouseDown(ev)
394
424
  }
395
425
  }
396
- // 为什么将hover状态放到model中?
426
+
397
427
  // 因为自定义节点的时候,可能会基于hover状态自定义不同的样式。
398
- setHoverON = (ev: MouseEvent) => {
428
+ setHoverOn = (ev: MouseEvent) => {
399
429
  const { model, graphModel } = this.props
400
430
  if (model.isHovered) return
401
431
  const nodeData = model.getData()
@@ -405,9 +435,11 @@ export abstract class BaseNode<P extends IProps> extends Component<P, IState> {
405
435
  e: ev,
406
436
  })
407
437
  }
408
- setHoverOFF = (ev: MouseEvent) => {
438
+
439
+ setHoverOff = (ev: MouseEvent) => {
409
440
  const { model, graphModel } = this.props
410
441
  const nodeData = model.getData()
442
+ // 文本focus时,关联的元素也需要高亮,所以元素失焦时还要判断下是否有文本处于focus状态
411
443
  if (!model.isHovered) return
412
444
  model.setHovered(false)
413
445
  graphModel.eventCenter.emit(EventType.NODE_MOUSELEAVE, {
@@ -415,11 +447,6 @@ export abstract class BaseNode<P extends IProps> extends Component<P, IState> {
415
447
  e: ev,
416
448
  })
417
449
  }
418
- onMouseOut = (ev: MouseEvent) => {
419
- if (isIe) {
420
- this.setHoverOFF(ev)
421
- }
422
- }
423
450
 
424
451
  /**
425
452
  * @overridable 支持重写, 节点置顶,可以被某些不需要置顶的节点重写,如group节点。
@@ -476,9 +503,9 @@ export abstract class BaseNode<P extends IProps> extends Component<P, IState> {
476
503
  onMouseDown={this.handleMouseDown}
477
504
  onMouseUp={this.handleMouseUp}
478
505
  onClick={this.handleClick}
479
- onMouseEnter={this.setHoverON}
480
- onMouseOver={this.setHoverON}
481
- onMouseLeave={this.setHoverOFF}
506
+ onMouseEnter={this.setHoverOn}
507
+ onMouseOver={this.setHoverOn}
508
+ onMouseLeave={this.setHoverOff}
482
509
  onMouseOut={this.onMouseOut}
483
510
  onContextMenu={this.handleContextMenu}
484
511
  {...restAttributes}
@@ -7,7 +7,9 @@ export type ICircleNodeProps = {
7
7
  graphModel: GraphModel
8
8
  }
9
9
 
10
- export class CircleNode extends BaseNode<ICircleNodeProps> {
10
+ export class CircleNode<
11
+ P extends ICircleNodeProps = ICircleNodeProps,
12
+ > extends BaseNode<P> {
11
13
  getShape() {
12
14
  const { model } = this.props
13
15
  const { x, y, r } = model
@@ -7,7 +7,9 @@ export type IDiamondNodeProps = {
7
7
  graphModel: GraphModel
8
8
  }
9
9
 
10
- export class DiamondNode extends BaseNode<IDiamondNodeProps> {
10
+ export class DiamondNode<
11
+ P extends IDiamondNodeProps = IDiamondNodeProps,
12
+ > extends BaseNode<P> {
11
13
  getShape() {
12
14
  const { model } = this.props
13
15
  const style = model.getNodeStyle()
@@ -7,7 +7,9 @@ export type IEllipseNodeProps = {
7
7
  graphModel: GraphModel
8
8
  }
9
9
 
10
- export class EllipseNode extends BaseNode<IEllipseNodeProps> {
10
+ export class EllipseNode<
11
+ P extends IEllipseNodeProps = IEllipseNodeProps,
12
+ > extends BaseNode<P> {
11
13
  getShape() {
12
14
  const { model } = this.props
13
15
  const style = model.getNodeStyle()
@@ -7,7 +7,9 @@ export type IHtmlNodeProps = {
7
7
  graphModel: GraphModel
8
8
  }
9
9
 
10
- export class HtmlNode extends BaseNode<IHtmlNodeProps> {
10
+ export class HtmlNode<
11
+ P extends IHtmlNodeProps = IHtmlNodeProps,
12
+ > extends BaseNode<P> {
11
13
  ref = createRef()
12
14
  currentProperties?: string
13
15
  preProperties?: string
@@ -52,14 +54,14 @@ export class HtmlNode extends BaseNode<IHtmlNodeProps> {
52
54
  }
53
55
 
54
56
  componentDidMount() {
55
- console.log('HtmlNode --->>> componentDidMount - 初始化内容')
57
+ // console.log('HtmlNode --->>> componentDidMount - 初始化内容')
56
58
  if (this.shouldUpdate() && this.rootEl) {
57
59
  this.setHtml(this.rootEl)
58
60
  }
59
61
  }
60
62
 
61
63
  componentDidUpdate() {
62
- console.log('HtmlNode --->>> componentDidUpdate - 更新节点内容')
64
+ // console.log('HtmlNode --->>> componentDidUpdate - 更新节点内容')
63
65
  // DONE: 将 componentDidMount 和 componentDidUpdate 区分开,如果写在一次,渲染 React 组件会重复初始化,消耗过多资源
64
66
  // 为了保证历史兼容性,先将默认 HTML 节点的 setHtml 和 confirmUpdate 保持一直,用户可通过自定义的方式重新定义
65
67
  if (this.shouldUpdate() && this.rootEl) {
@@ -7,7 +7,9 @@ export type IPolygonNodeProps = {
7
7
  graphModel: GraphModel
8
8
  }
9
9
 
10
- export class PolygonNode extends BaseNode<IPolygonNodeProps> {
10
+ export class PolygonNode<
11
+ P extends IPolygonNodeProps = IPolygonNodeProps,
12
+ > extends BaseNode<P> {
11
13
  getShape() {
12
14
  const { model } = this.props
13
15
  const { x, y, width, height, points } = model as PolygonNodeModel
@@ -8,7 +8,9 @@ export type IRectNodeProps = {
8
8
  graphModel: GraphModel
9
9
  }
10
10
 
11
- export class RectNode extends BaseNode<IRectNodeProps> {
11
+ export class RectNode<
12
+ P extends IRectNodeProps = IRectNodeProps,
13
+ > extends BaseNode<P> {
12
14
  getShape(): h.JSX.Element | null {
13
15
  const { model } = this.props
14
16
  const style = model.getNodeStyle()
@@ -7,7 +7,9 @@ export type ITextNodeProps = {
7
7
  graphModel: GraphModel
8
8
  }
9
9
 
10
- export class TextNode extends BaseNode<ITextNodeProps> {
10
+ export class TextNode<
11
+ P extends ITextNodeProps = ITextNodeProps,
12
+ > extends BaseNode<P> {
11
13
  getBackground() {
12
14
  const { model } = this.props
13
15
  const style = model.getTextStyle()
@@ -18,7 +20,7 @@ export class TextNode extends BaseNode<ITextNodeProps> {
18
20
  const rectAttr = {
19
21
  ...style.background,
20
22
  x,
21
- y: y - 1,
23
+ y,
22
24
  width,
23
25
  height,
24
26
  }
@@ -33,7 +33,7 @@ export class CanvasOverlay extends Component<IProps, IState> {
33
33
  eventCenter,
34
34
  model: undefined,
35
35
  })
36
- // 当ctrl键被按住的时候,可以放大缩小。
36
+ // 当 ctrl、cmd 键被按住的时候,可以放大缩小。
37
37
  this.state = {
38
38
  isDragging: false,
39
39
  }
@@ -65,8 +65,8 @@ export class CanvasOverlay extends Component<IProps, IState> {
65
65
  graphModel,
66
66
  } = this.props
67
67
  const { deltaX: eX, deltaY: eY } = ev
68
- // 如果没有禁止滚动移动画布, 并且当前触发的时候ctrl键没有按住, 那么移动画布
69
- if (!editConfigModel.stopScrollGraph && ev.ctrlKey !== true) {
68
+ // 如果没有禁止滚动移动画布, 并且当前触发的时候ctrl键、cmd键没有按住, 那么移动画布
69
+ if (!editConfigModel.stopScrollGraph && !ev.ctrlKey && !ev.metaKey) {
70
70
  ev.preventDefault()
71
71
  this.stepScrollX += eX
72
72
  this.stepScrollY += eY
@@ -84,7 +84,7 @@ export class CanvasOverlay extends Component<IProps, IState> {
84
84
  }
85
85
  return
86
86
  }
87
- // 如果没有禁止缩放画布,那么进行缩放. 在禁止缩放画布后,按住ctrl键也不能缩放了。
87
+ // 如果没有禁止缩放画布,那么进行缩放. 在禁止缩放画布后,按住 ctrl、cmd 键也不能缩放了。
88
88
  if (!editConfigModel.stopZoomGraph) {
89
89
  ev.preventDefault()
90
90
  const position = graphModel.getPointByClient({
@@ -123,6 +123,7 @@ export class CanvasOverlay extends Component<IProps, IState> {
123
123
  })
124
124
  }
125
125
  }
126
+ // 鼠标、触摸板 按下
126
127
  mouseDownHandler = (ev: MouseEvent) => {
127
128
  const {
128
129
  graphModel: {