@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
@@ -1,16 +1,16 @@
1
1
  import { Component } from 'preact/compat'
2
+ import { IToolProps } from '.'
2
3
  import { Model, observer } from '..'
3
4
  import LogicFlow from '../LogicFlow'
4
5
  import { StepDrag, IDragParams } from '../util'
5
6
  import { ElementType, EventType } from '../constant'
6
7
  import { getNodeOutline, getEdgeOutline } from '../algorithm/outline'
7
- import { IToolProps } from './tool'
8
8
 
9
9
  import GraphData = LogicFlow.GraphData
10
10
 
11
11
  @observer
12
12
  export default class MultipleSelect extends Component<IToolProps> {
13
- static toolName = 'multipleSelect'
13
+ static toolName = 'multiple-select-tool'
14
14
  stepDrag: StepDrag
15
15
 
16
16
  constructor(props: IToolProps) {
@@ -40,13 +40,13 @@ export default class MultipleSelect extends Component<IToolProps> {
40
40
  clientY,
41
41
  ctrlKey,
42
42
  })
43
- this.props.logicFlow.container
43
+ this.props.lf.container
44
44
  ?.querySelector('.lf-canvas-overlay[name="canvas-overlay"]')
45
45
  ?.dispatchEvent(newEvent)
46
46
  }
47
47
  onDragging = ({ deltaX, deltaY }: IDragParams) => {
48
- const { graphModel, logicFlow } = this.props
49
- const { SCALE_X, SCALE_Y } = logicFlow.getTransform()
48
+ const { graphModel, lf } = this.props
49
+ const { SCALE_X, SCALE_Y } = lf.getTransform()
50
50
  const selectElements = graphModel.getSelectElements(true)
51
51
  graphModel.moveNodes(
52
52
  selectElements.nodes.map((node) => node.id),
@@ -88,7 +88,7 @@ export default class MultipleSelect extends Component<IToolProps> {
88
88
  const {
89
89
  graphModel: { selectElements, transformModel },
90
90
  } = this.props
91
- const { SCALE_X, SCALE_Y } = this.props.logicFlow.getTransform()
91
+ const { SCALE_X, SCALE_Y } = this.props.lf.getTransform()
92
92
  if (selectElements.size <= 1) return
93
93
  let x = Number.MAX_SAFE_INTEGER
94
94
  let y = Number.MAX_SAFE_INTEGER
@@ -1,7 +1,7 @@
1
- import { createRef, Component } from 'preact'
1
+ import { createRef, Component } from 'preact/compat'
2
+ import { IToolProps } from '.'
2
3
  import { ElementState, observer } from '..'
3
4
  import { ElementType, EventType, ModelType } from '../constant'
4
- import { IToolProps } from './tool'
5
5
 
6
6
  type IState = {
7
7
  style: {
@@ -12,7 +12,7 @@ type IState = {
12
12
 
13
13
  @observer
14
14
  export class TextEditTool extends Component<IToolProps, IState> {
15
- static toolName = 'textEdit'
15
+ static toolName = 'text-edit-tool'
16
16
  ref = createRef()
17
17
  __prevText = {
18
18
  type: '',
package/src/tool/index.ts CHANGED
@@ -1,2 +1,96 @@
1
- export * from './tool'
2
- export * from './snapline'
1
+ import { Component, ReactElement } from 'preact/compat'
2
+ import { action, observable } from 'mobx'
3
+ import { forEach } from 'lodash-es'
4
+ import TextEdit from './TextEditTool'
5
+ import MultipleSelect from './MultipleSelectTool'
6
+ import LogicFlow from '../LogicFlow'
7
+ import { ElementState, EventType } from '../constant'
8
+ import { GraphModel, BaseEdgeModel, BaseNodeModel } from '../model'
9
+
10
+ export type IToolProps = {
11
+ lf: LogicFlow
12
+ graphModel: GraphModel
13
+ textEditElement?: BaseNodeModel | BaseEdgeModel
14
+ }
15
+
16
+ type ToolConstructor = new (props: IToolProps) => Component<IToolProps>
17
+
18
+ // 默认内置的工具
19
+ const defaultTools = [TextEdit, MultipleSelect]
20
+
21
+ export class Tool {
22
+ tools?: Component[]
23
+ components?: ReactElement<IToolProps>[]
24
+ @observable toolMap = new Map<string, ToolConstructor>()
25
+
26
+ disabledToolMap = new Map<string, ToolConstructor>()
27
+ instance: LogicFlow
28
+
29
+ constructor(instance: LogicFlow) {
30
+ this.instance = instance
31
+ forEach(defaultTools, (tool) => {
32
+ if (!this.isDisabled(tool.toolName)) {
33
+ this.registerTool(tool.toolName, tool)
34
+ }
35
+ })
36
+
37
+ // @see https://github.com/didi/LogicFlow/issues/152
38
+ const { graphModel } = instance
39
+ const { eventCenter } = graphModel
40
+ eventCenter.on(
41
+ `${EventType.GRAPH_TRANSFORM},${EventType.NODE_CLICK},${EventType.BLANK_CLICK} `,
42
+ () => {
43
+ const {
44
+ textEditElement,
45
+ editConfigModel: { edgeTextEdit, nodeTextEdit },
46
+ } = graphModel
47
+ // fix #826, 保留之前的文本可以编辑点击空白才设置为不可编辑。如果以后有其他需求再改。
48
+ if ((edgeTextEdit || nodeTextEdit) && textEditElement) {
49
+ graphModel.textEditElement?.setElementState(ElementState.DEFAULT)
50
+ }
51
+ },
52
+ )
53
+ }
54
+
55
+ private isDisabled(toolName) {
56
+ return this.instance.options.disabledTools?.indexOf(toolName) !== -1
57
+ }
58
+
59
+ // 注册工具
60
+ registerTool(name: string, component: ToolConstructor) {
61
+ this.toolMap.set(name, component)
62
+ }
63
+
64
+ // 禁用工具
65
+ @action
66
+ disableTool(name: string): boolean | Error {
67
+ const tool = this.toolMap.get(name)
68
+ if (tool) {
69
+ this.disabledToolMap.set(name, tool)
70
+ this.toolMap.delete(name)
71
+ return true
72
+ }
73
+ throw new Error('禁用失败,不存在名为 ${tool} 的工具')
74
+ }
75
+
76
+ @action
77
+ enableTool(name: string): boolean | Error {
78
+ const tool = this.disabledToolMap.get(name)
79
+ if (tool) {
80
+ this.toolMap.set(name, tool)
81
+ this.disabledToolMap.delete(name)
82
+ return true
83
+ }
84
+ throw new Error('不存在名为 ${tool} 的工具')
85
+ }
86
+
87
+ getTools() {
88
+ return Array.from(this.toolMap.values())
89
+ }
90
+
91
+ getInstance() {
92
+ return this.instance
93
+ }
94
+ }
95
+
96
+ export default Tool
package/src/util/drag.ts CHANGED
@@ -10,7 +10,7 @@ const LEFT_MOUSE_BUTTON_CODE = 0
10
10
  export type IDragParams = {
11
11
  deltaX: number
12
12
  deltaY: number
13
- event: MouseEvent | null
13
+ event?: MouseEvent
14
14
  [key: string]: unknown
15
15
  }
16
16
 
@@ -23,9 +23,16 @@ export type ICreateDragParams = {
23
23
  }
24
24
 
25
25
  export type IStepperDragProps = {
26
- eventType?: 'NODE' | 'BLANK' | 'SELECTION' | 'ADJUST_POINT' | ''
26
+ eventType?:
27
+ | 'NODE'
28
+ | 'BLANK'
29
+ | 'SELECTION'
30
+ | 'ADJUST_POINT'
31
+ | 'TEXT'
32
+ | 'LABEL'
33
+ | ''
27
34
  eventCenter?: EventEmitter
28
- model?: Model.BaseModel | null
35
+ model?: Model.BaseModel | unknown
29
36
  data?: Record<string, unknown>
30
37
  [key: string]: unknown
31
38
  } & Partial<ICreateDragParams>
@@ -39,9 +46,16 @@ export class StepDrag {
39
46
 
40
47
  step: number
41
48
  isStopPropagation: boolean
42
- eventType: 'NODE' | 'BLANK' | 'SELECTION' | 'ADJUST_POINT' | ''
49
+ eventType:
50
+ | 'NODE'
51
+ | 'BLANK'
52
+ | 'SELECTION'
53
+ | 'ADJUST_POINT'
54
+ | 'TEXT'
55
+ | 'LABEL'
56
+ | ''
43
57
  eventCenter?: EventEmitter
44
- model?: Model.BaseModel | null
58
+ model?: Model.BaseModel | any // TODO: 如何兼容 LabelModel 类型。 LabelModel 能否是 BaseModel 的实现呢?
45
59
  data?: Record<string, unknown>
46
60
 
47
61
  // 运行时
@@ -141,6 +155,8 @@ export class StepDrag {
141
155
  event: e,
142
156
  })
143
157
  this.eventCenter?.emit(EventType[`${this.eventType}_MOUSEMOVE`], {
158
+ deltaX,
159
+ deltaY,
144
160
  e,
145
161
  data: this.data || elementData,
146
162
  })
@@ -180,7 +196,7 @@ export class StepDrag {
180
196
 
181
197
  DOC.removeEventListener('mousemove', this.handleMouseMove, false)
182
198
  DOC.removeEventListener('mouseup', this.handleMouseUp, false)
183
- this.onDragEnd({ event: null })
199
+ this.onDragEnd({ event: undefined })
184
200
  this.isDragging = false
185
201
  }
186
202
  }
package/src/util/edge.ts CHANGED
@@ -1,10 +1,13 @@
1
- import { pick } from 'lodash-es'
1
+ import { pick, forEach } from 'lodash-es'
2
2
  import { getNodeBBox, isInNode, distance, sampleCubic } from '.'
3
3
  import LogicFlow from '../LogicFlow'
4
4
  import { Options } from '../options'
5
5
  import { SegmentDirection } from '../constant'
6
- import { getVerticalPointOfLine } from '../algorithm'
7
- import { getCrossPointOfLine, isInSegment } from '../algorithm/edge'
6
+ import {
7
+ getVerticalPointOfLine,
8
+ getCrossPointOfLine,
9
+ isInSegment,
10
+ } from '../algorithm'
8
11
  import {
9
12
  Model,
10
13
  BaseNodeModel,
@@ -397,7 +400,7 @@ export const getNextNeighborPoints = (
397
400
  return filterRepeatPoints(neighbors)
398
401
  }
399
402
 
400
- /* 路径查找,Astart查找+曼哈顿距离
403
+ /* 路径查找,AStar查找+曼哈顿距离
401
404
  * 算法wiki:https://zh.wikipedia.org/wiki/A*%E6%90%9C%E5%B0%8B%E6%BC%94%E7%AE%97%E6%B3%95
402
405
  * 方法无法复用,且调用了很多polyline相关的方法,暂不抽离到src/algorithm中
403
406
  */
@@ -590,10 +593,10 @@ export const getPolylinePoints = (
590
593
  * @param pointsList 多个点组成的数组
591
594
  */
592
595
  export const getLongestEdge = (pointsList: Point[]): [Point, Point] => {
593
- let points
594
596
  if (pointsList.length === 1) {
595
- points = [pointsList[0], pointsList[0]]
596
- } else if (pointsList.length >= 2) {
597
+ const [point] = pointsList
598
+ return [point, point]
599
+ } else {
597
600
  let point1 = pointsList[0]
598
601
  let point2 = pointsList[1]
599
602
  let edgeLength = distance(point1.x, point1.y, point2.x, point2.y)
@@ -612,9 +615,8 @@ export const getLongestEdge = (pointsList: Point[]): [Point, Point] => {
612
615
  point2 = newPoint2
613
616
  }
614
617
  }
615
- points = [point1, point2]
618
+ return [point1, point2]
616
619
  }
617
- return points
618
620
  }
619
621
 
620
622
  /* 线段是否在节点内部,被包含了 */
@@ -650,8 +652,7 @@ export const getCrossPointInRect = (
650
652
  start: Point,
651
653
  end: Point,
652
654
  node: BaseNodeModel,
653
- ): Point => {
654
- let point
655
+ ): Point | false | undefined => {
655
656
  let crossSegments: [Point, Point] | undefined = undefined
656
657
  const nodeBox = getNodeBBox(node)
657
658
  const points = getPointsFromBBox(nodeBox)
@@ -667,9 +668,8 @@ export const getCrossPointInRect = (
667
668
  }
668
669
  }
669
670
  if (crossSegments) {
670
- point = getCrossPointOfLine(start, end, crossSegments[0], crossSegments[1])
671
+ return getCrossPointOfLine(start, end, crossSegments[0], crossSegments[1])
671
672
  }
672
- return point
673
673
  }
674
674
  /* 判断线段的方向 */
675
675
  export const segmentDirection = (
@@ -915,6 +915,7 @@ export const getEndTangent = (
915
915
  * 获取移动边后,文本位置距离边上的最近的一点
916
916
  * @param point 边上文本的位置
917
917
  * @param points 边的各个拐点
918
+ * TODO: Label实验没问题后统一改成新的计算方式,把这个方法废弃
918
919
  */
919
920
  export const getClosestPointOfPolyline = (
920
921
  point: Point,
@@ -1032,3 +1033,28 @@ export function createEdgeGenerator(
1032
1033
  return Object.assign({ type: result }, currentEdge)
1033
1034
  }
1034
1035
  }
1036
+
1037
+ // 获取 Svg 标签文案高度,自动换行
1038
+ export type IGetSvgTextSizeParams = {
1039
+ rows: string[]
1040
+ rowsLength: number
1041
+ fontSize: number
1042
+ }
1043
+ export const getSvgTextSize = ({
1044
+ rows,
1045
+ rowsLength,
1046
+ fontSize,
1047
+ }: IGetSvgTextSizeParams): LogicFlow.RectSize => {
1048
+ let longestBytes = 0
1049
+ forEach(rows, (row) => {
1050
+ const rowBytesLength = getBytesLength(row)
1051
+ longestBytes = rowBytesLength > longestBytes ? rowBytesLength : longestBytes
1052
+ })
1053
+
1054
+ // 背景框宽度,最长一行字节数/2 * fontsize + 2
1055
+ // 背景框宽度, 行数 * fontsize + 2
1056
+ return {
1057
+ width: Math.ceil(longestBytes / 2) * fontSize + fontSize / 4,
1058
+ height: rowsLength * (fontSize + 2) + fontSize / 4,
1059
+ }
1060
+ }
package/src/util/index.ts CHANGED
@@ -9,6 +9,7 @@ export * from './matrix'
9
9
  export * from './mobx'
10
10
  export * from './node'
11
11
  export * from './raf'
12
+ export * from './resize'
12
13
  export * from './sampling'
13
14
  export * from './theme'
14
15
  export * from './uuid'
package/src/util/node.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import { pick } from 'lodash-es'
2
+ import { createElement as h } from 'preact/compat'
2
3
  import { getBytesLength } from './edge'
3
4
  import LogicFlow from '../LogicFlow'
4
5
  import {
@@ -18,6 +19,7 @@ import Direction = LogicFlow.Direction
18
19
  import NodeConfig = LogicFlow.NodeConfig
19
20
  import LineSegment = LogicFlow.LineSegment
20
21
  import AnchorInfo = Model.AnchorInfo
22
+ import BoxBoundsPoint = Model.BoxBoundsPoint
21
23
 
22
24
  /* 获取所有锚点 */
23
25
  export const getAnchors = (data: BaseNodeModel) => {
@@ -144,13 +146,9 @@ export type NodeBBox = {
144
146
  y: number
145
147
  width: number
146
148
  height: number
147
- minX: number
148
- minY: number
149
- maxX: number
150
- maxY: number
151
149
  centerX: number
152
150
  centerY: number
153
- }
151
+ } & BoxBoundsPoint
154
152
 
155
153
  /* 获取节点bbox */
156
154
  export const getNodeBBox = (node: BaseNodeModel): NodeBBox => {
@@ -411,9 +409,14 @@ export const pickNodeConfig = (data: NodeConfig): NodeConfig => {
411
409
  'x',
412
410
  'y',
413
411
  'text',
412
+ 'label',
414
413
  'properties',
415
414
  'virtual', // 区域节点是否为dnd添加的虚拟节点
416
415
  'rotate',
416
+
417
+ // TODO: 确认是否可以加到此处
418
+ 'resizable',
419
+ 'rotatable',
417
420
  ])
418
421
  return nodeData
419
422
  }
@@ -444,7 +447,26 @@ export const getNodeAnchorPosition = (
444
447
  }
445
448
  }
446
449
 
447
- // 获取文案高度,自动换行,利用dom计算高度
450
+ /*********************************************************
451
+ * Text 节点文本相关工具函数
452
+ ********************************************************/
453
+ // Text 相关节点工具函数
454
+ // TODO: 获取文案高度,设置自动换行,利用 dom 计算高度
455
+ // function getTextHeight(text: string, font: string): number {
456
+ // const span = document.createElement('span');
457
+ // span.textContent = text;
458
+ // span.style.font = font;
459
+
460
+ // const range = document.createRange();
461
+ // range.selectNodeContents(span);
462
+
463
+ // const rect = range.getBoundingClientRect();
464
+ // const height = rect.height;
465
+
466
+ // return height;
467
+ // }
468
+
469
+ // 获取文案高度,自动换行,利用 dom 计算高度
448
470
  export const getHtmlTextHeight = ({
449
471
  rows,
450
472
  style,
@@ -452,18 +474,18 @@ export const getHtmlTextHeight = ({
452
474
  className,
453
475
  }: {
454
476
  rows: string[]
455
- style: any // TODO: 完善类型
477
+ style: h.JSX.CSSProperties
456
478
  rowsLength: number
457
479
  className: string
458
480
  }) => {
459
481
  const dom = document.createElement('div')
460
- dom.style.fontSize = style.fontSize
461
- dom.style.width = style.width
462
482
  dom.className = className
463
- dom.style.lineHeight = style.lineHeight
464
- dom.style.padding = style.padding
483
+ dom.style.fontSize = `${style.fontSize}`
484
+ dom.style.width = `${style.width}`
485
+ dom.style.lineHeight = `${style.lineHeight}`
486
+ dom.style.padding = `${style.padding}`
465
487
  if (style.fontFamily) {
466
- dom.style.fontFamily = style.fontFamily
488
+ dom.style.fontFamily = `${style.fontFamily}`
467
489
  }
468
490
  if (rowsLength > 1) {
469
491
  rows.forEach((row) => {
@@ -479,6 +501,7 @@ export const getHtmlTextHeight = ({
479
501
  document.body.removeChild(dom)
480
502
  return height
481
503
  }
504
+
482
505
  // 获取文案高度,自动换行,利用dom计算高度
483
506
  export const getSvgTextWidthHeight = ({
484
507
  rows,
@@ -506,7 +529,7 @@ export const getSvgTextWidthHeight = ({
506
529
  /**
507
530
  * @description 格式化边校验信息
508
531
  */
509
- export const formateAnchorConnectValidateData = (
532
+ export const formatAnchorConnectValidateData = (
510
533
  data: Model.ConnectRuleResult,
511
534
  ) => {
512
535
  if (typeof data !== 'object') {