@logicflow/core 1.2.27 → 2.0.0-beta.0

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 (804) hide show
  1. package/.turbo/turbo-build$colon$dev.log +10 -0
  2. package/.turbo/turbo-build.log +42 -0
  3. package/CHANGELOG.md +2114 -0
  4. package/LICENSE +206 -0
  5. package/__tests__/algorithm/egde.test.ts +118 -0
  6. package/__tests__/algorithm/index.test.ts +69 -0
  7. package/__tests__/algorithm/outline.test.ts +43 -0
  8. package/__tests__/bugs/1545-spec.test.ts +38 -0
  9. package/__tests__/event/event.test.ts +22 -0
  10. package/__tests__/history/history.test.ts +28 -0
  11. package/__tests__/logicflow.test.ts +567 -0
  12. package/__tests__/model/graphmodel.test.ts +67 -0
  13. package/__tests__/util/compatible.test.ts +48 -0
  14. package/__tests__/util/edge.test.ts +224 -0
  15. package/__tests__/util/geometry.test.ts +14 -0
  16. package/__tests__/util/graph.test.ts +16 -0
  17. package/__tests__/util/matrix.test.ts +41 -0
  18. package/__tests__/util/node.test.ts +68 -0
  19. package/__tests__/util/sampling.test.ts +16 -0
  20. package/__tests__/util/vector.test.ts +50 -0
  21. package/__tests__/util/zIndex.test.ts +10 -0
  22. package/dist/{style/index.css → index.css} +64 -52
  23. package/dist/index.js +26 -0
  24. package/dist/index.js.map +1 -0
  25. package/es/LogicFlow.d.ts +966 -0
  26. package/es/LogicFlow.js +1174 -0
  27. package/es/LogicFlow.js.map +1 -0
  28. package/es/algorithm/edge.d.ts +15 -0
  29. package/es/algorithm/edge.js +57 -0
  30. package/es/algorithm/edge.js.map +1 -0
  31. package/es/algorithm/index.js +71 -0
  32. package/es/algorithm/index.js.map +1 -0
  33. package/es/algorithm/outline.d.ts +7 -0
  34. package/es/algorithm/outline.js +61 -0
  35. package/es/algorithm/outline.js.map +1 -0
  36. package/{types/constant/constant.d.ts → es/constant/index.d.ts} +23 -22
  37. package/es/constant/index.js +117 -0
  38. package/es/constant/index.js.map +1 -0
  39. package/es/event/eventArgs.d.ts +428 -0
  40. package/es/event/eventArgs.js +2 -0
  41. package/es/event/eventArgs.js.map +1 -0
  42. package/es/event/eventEmitter.d.ts +48 -0
  43. package/es/event/eventEmitter.js +92 -0
  44. package/es/event/eventEmitter.js.map +1 -0
  45. package/es/history/index.d.ts +23 -0
  46. package/es/history/index.js +111 -0
  47. package/es/history/index.js.map +1 -0
  48. package/es/index.css +210 -0
  49. package/{types → es}/index.d.ts +4 -6
  50. package/es/index.js +16 -0
  51. package/es/index.js.map +1 -0
  52. package/es/index.less +1 -0
  53. package/{types → es}/keyboard/index.d.ts +7 -8
  54. package/es/keyboard/index.js +87 -0
  55. package/es/keyboard/index.js.map +1 -0
  56. package/es/keyboard/shortcut.js +116 -0
  57. package/es/keyboard/shortcut.js.map +1 -0
  58. package/es/model/BaseModel.d.ts +181 -0
  59. package/es/model/BaseModel.js +2 -0
  60. package/es/model/BaseModel.js.map +1 -0
  61. package/{types → es}/model/EditConfigModel.d.ts +13 -8
  62. package/es/model/EditConfigModel.js +192 -0
  63. package/es/model/EditConfigModel.js.map +1 -0
  64. package/{types → es}/model/GraphModel.d.ts +118 -178
  65. package/es/model/GraphModel.js +1473 -0
  66. package/es/model/GraphModel.js.map +1 -0
  67. package/es/model/SnaplineModel.d.ts +34 -0
  68. package/es/model/SnaplineModel.js +217 -0
  69. package/es/model/SnaplineModel.js.map +1 -0
  70. package/{types → es}/model/TransformModel.d.ts +21 -11
  71. package/es/model/TransformModel.js +240 -0
  72. package/es/model/TransformModel.js.map +1 -0
  73. package/{types → es}/model/edge/BaseEdgeModel.d.ts +82 -63
  74. package/es/model/edge/BaseEdgeModel.js +739 -0
  75. package/es/model/edge/BaseEdgeModel.js.map +1 -0
  76. package/es/model/edge/BezierEdgeModel.d.ts +63 -0
  77. package/es/model/edge/BezierEdgeModel.js +244 -0
  78. package/es/model/edge/BezierEdgeModel.js.map +1 -0
  79. package/es/model/edge/LineEdgeModel.d.ts +19 -0
  80. package/es/model/edge/LineEdgeModel.js +77 -0
  81. package/es/model/edge/LineEdgeModel.js.map +1 -0
  82. package/es/model/edge/PolylineEdgeModel.d.ts +85 -0
  83. package/es/model/edge/PolylineEdgeModel.js +593 -0
  84. package/es/model/edge/PolylineEdgeModel.js.map +1 -0
  85. package/es/model/edge/index.js +5 -0
  86. package/es/model/edge/index.js.map +1 -0
  87. package/es/model/index.js +8 -0
  88. package/es/model/index.js.map +1 -0
  89. package/es/model/node/BaseNodeModel.d.ts +260 -0
  90. package/es/model/node/BaseNodeModel.js +883 -0
  91. package/es/model/node/BaseNodeModel.js.map +1 -0
  92. package/es/model/node/CircleNodeModel.d.ts +40 -0
  93. package/es/model/node/CircleNodeModel.js +110 -0
  94. package/es/model/node/CircleNodeModel.js.map +1 -0
  95. package/es/model/node/DiamondNodeModel.d.ts +46 -0
  96. package/es/model/node/DiamondNodeModel.js +187 -0
  97. package/es/model/node/DiamondNodeModel.js.map +1 -0
  98. package/es/model/node/EllipseNodeModel.d.ts +42 -0
  99. package/es/model/node/EllipseNodeModel.js +118 -0
  100. package/es/model/node/EllipseNodeModel.js.map +1 -0
  101. package/es/model/node/HtmlNodeModel.d.ts +21 -0
  102. package/es/model/node/HtmlNodeModel.js +59 -0
  103. package/es/model/node/HtmlNodeModel.js.map +1 -0
  104. package/es/model/node/PolygonNodeModel.d.ts +50 -0
  105. package/es/model/node/PolygonNodeModel.js +196 -0
  106. package/es/model/node/PolygonNodeModel.js.map +1 -0
  107. package/es/model/node/RectNodeModel.d.ts +34 -0
  108. package/es/model/node/RectNodeModel.js +80 -0
  109. package/es/model/node/RectNodeModel.js.map +1 -0
  110. package/es/model/node/TextNodeModel.d.ts +27 -0
  111. package/es/model/node/TextNodeModel.js +113 -0
  112. package/es/model/node/TextNodeModel.js.map +1 -0
  113. package/es/model/node/index.js +9 -0
  114. package/es/model/node/index.js.map +1 -0
  115. package/es/options.d.ts +86 -0
  116. package/es/options.js +74 -0
  117. package/es/options.js.map +1 -0
  118. package/es/style/index.css +210 -0
  119. package/es/style/index.less +256 -0
  120. package/es/style/raw.d.ts +4 -0
  121. package/es/style/raw.js +6 -0
  122. package/es/style/raw.js.map +1 -0
  123. package/es/tool/MultipleSelectTool.d.ts +13 -0
  124. package/es/tool/MultipleSelectTool.js +159 -0
  125. package/es/tool/MultipleSelectTool.js.map +1 -0
  126. package/es/tool/TextEditTool.d.ts +26 -0
  127. package/es/tool/TextEditTool.js +187 -0
  128. package/es/tool/TextEditTool.js.map +1 -0
  129. package/es/tool/index.d.ts +2 -0
  130. package/es/tool/index.js +3 -0
  131. package/es/tool/index.js.map +1 -0
  132. package/{types/tool/SnaplineTool.d.ts → es/tool/snapline.d.ts} +1 -1
  133. package/es/tool/snapline.js +13 -0
  134. package/es/tool/snapline.js.map +1 -0
  135. package/es/tool/tool.d.ts +22 -0
  136. package/es/tool/tool.js +43 -0
  137. package/es/tool/tool.js.map +1 -0
  138. package/es/util/animation.d.ts +12 -0
  139. package/es/util/animation.js +20 -0
  140. package/es/util/animation.js.map +1 -0
  141. package/es/util/browser.js +3 -0
  142. package/es/util/browser.js.map +1 -0
  143. package/es/util/compatible.d.ts +6 -0
  144. package/es/util/compatible.js +17 -0
  145. package/es/util/compatible.js.map +1 -0
  146. package/es/util/drag.d.ts +47 -0
  147. package/es/util/drag.js +139 -0
  148. package/es/util/drag.js.map +1 -0
  149. package/es/util/edge.d.ts +94 -0
  150. package/es/util/edge.js +833 -0
  151. package/es/util/edge.js.map +1 -0
  152. package/es/util/geometry.d.ts +11 -0
  153. package/es/util/geometry.js +72 -0
  154. package/es/util/geometry.js.map +1 -0
  155. package/{types → es}/util/graph.d.ts +4 -3
  156. package/es/util/graph.js +54 -0
  157. package/es/util/graph.js.map +1 -0
  158. package/es/util/index.d.ts +16 -0
  159. package/es/util/index.js +17 -0
  160. package/es/util/index.js.map +1 -0
  161. package/{types → es}/util/matrix.d.ts +1 -1
  162. package/es/util/matrix.js +161 -0
  163. package/es/util/matrix.js.map +1 -0
  164. package/es/util/mobx.js +4 -0
  165. package/es/util/mobx.js.map +1 -0
  166. package/es/util/node.d.ts +69 -0
  167. package/es/util/node.js +402 -0
  168. package/es/util/node.js.map +1 -0
  169. package/es/util/raf.d.ts +2 -0
  170. package/es/util/raf.js +24 -0
  171. package/es/util/raf.js.map +1 -0
  172. package/{types → es}/util/sampling.d.ts +4 -2
  173. package/es/util/sampling.js +66 -0
  174. package/es/util/sampling.js.map +1 -0
  175. package/es/util/theme.d.ts +4 -0
  176. package/es/util/theme.js +156 -0
  177. package/es/util/theme.js.map +1 -0
  178. package/es/util/uuid.d.ts +7 -0
  179. package/es/util/uuid.js +20 -0
  180. package/es/util/uuid.js.map +1 -0
  181. package/{types → es}/util/vector.d.ts +2 -2
  182. package/es/util/vector.js +97 -0
  183. package/es/util/vector.js.map +1 -0
  184. package/es/util/zIndex.js +5 -0
  185. package/es/util/zIndex.js.map +1 -0
  186. package/es/view/Anchor.d.ts +47 -0
  187. package/es/view/Anchor.js +315 -0
  188. package/es/view/Anchor.js.map +1 -0
  189. package/es/view/Control.d.ts +100 -0
  190. package/es/view/Control.js +324 -0
  191. package/es/view/Control.js.map +1 -0
  192. package/es/view/Graph.d.ts +18 -0
  193. package/es/view/Graph.js +77 -0
  194. package/es/view/Graph.js.map +1 -0
  195. package/{types → es}/view/Rotate.d.ts +9 -9
  196. package/es/view/Rotate.js +108 -0
  197. package/es/view/Rotate.js.map +1 -0
  198. package/es/view/behavior/dnd.d.ts +27 -0
  199. package/es/view/behavior/dnd.js +110 -0
  200. package/es/view/behavior/dnd.js.map +1 -0
  201. package/es/view/edge/AdjustPoint.d.ts +50 -0
  202. package/es/view/edge/AdjustPoint.js +368 -0
  203. package/es/view/edge/AdjustPoint.js.map +1 -0
  204. package/es/view/edge/Arrow.d.ts +25 -0
  205. package/es/view/edge/Arrow.js +60 -0
  206. package/es/view/edge/Arrow.js.map +1 -0
  207. package/{types → es}/view/edge/BaseEdge.d.ts +25 -17
  208. package/es/view/edge/BaseEdge.js +381 -0
  209. package/es/view/edge/BaseEdge.js.map +1 -0
  210. package/es/view/edge/BezierEdge.d.ts +26 -0
  211. package/es/view/edge/BezierEdge.js +118 -0
  212. package/es/view/edge/BezierEdge.js.map +1 -0
  213. package/{types → es}/view/edge/LineEdge.d.ts +9 -4
  214. package/es/view/edge/LineEdge.js +78 -0
  215. package/es/view/edge/LineEdge.js.map +1 -0
  216. package/{types → es}/view/edge/PolylineEdge.d.ts +18 -8
  217. package/es/view/edge/PolylineEdge.js +274 -0
  218. package/es/view/edge/PolylineEdge.js.map +1 -0
  219. package/es/view/edge/index.d.ts +6 -0
  220. package/es/view/edge/index.js +7 -0
  221. package/es/view/edge/index.js.map +1 -0
  222. package/es/view/index.d.ts +7 -0
  223. package/es/view/index.js +8 -0
  224. package/es/view/index.js.map +1 -0
  225. package/es/view/node/BaseNode.d.ts +49 -0
  226. package/es/view/node/BaseNode.js +420 -0
  227. package/es/view/node/BaseNode.js.map +1 -0
  228. package/es/view/node/CircleNode.d.ts +10 -0
  229. package/es/view/node/CircleNode.js +45 -0
  230. package/es/view/node/CircleNode.js.map +1 -0
  231. package/es/view/node/DiamondNode.d.ts +10 -0
  232. package/es/view/node/DiamondNode.js +44 -0
  233. package/es/view/node/DiamondNode.js.map +1 -0
  234. package/es/view/node/EllipseNode.d.ts +10 -0
  235. package/es/view/node/EllipseNode.js +44 -0
  236. package/es/view/node/EllipseNode.js.map +1 -0
  237. package/{types → es}/view/node/HtmlNode.d.ts +15 -9
  238. package/es/view/node/HtmlNode.js +129 -0
  239. package/es/view/node/HtmlNode.js.map +1 -0
  240. package/es/view/node/PolygonNode.d.ts +10 -0
  241. package/es/view/node/PolygonNode.js +48 -0
  242. package/es/view/node/PolygonNode.js.map +1 -0
  243. package/es/view/node/RectNode.d.ts +11 -0
  244. package/es/view/node/RectNode.js +44 -0
  245. package/es/view/node/RectNode.js.map +1 -0
  246. package/es/view/node/TextNode.d.ts +12 -0
  247. package/es/view/node/TextNode.js +55 -0
  248. package/es/view/node/TextNode.js.map +1 -0
  249. package/es/view/node/index.d.ts +8 -0
  250. package/es/view/node/index.js +9 -0
  251. package/es/view/node/index.js.map +1 -0
  252. package/{types → es}/view/overlay/BackgroundOverlay.d.ts +7 -7
  253. package/es/view/overlay/BackgroundOverlay.js +31 -0
  254. package/es/view/overlay/BackgroundOverlay.js.map +1 -0
  255. package/es/view/overlay/BezierAdjustOverlay.d.ts +31 -0
  256. package/es/view/overlay/BezierAdjustOverlay.js +142 -0
  257. package/es/view/overlay/BezierAdjustOverlay.js.map +1 -0
  258. package/{types → es}/view/overlay/CanvasOverlay.d.ts +8 -11
  259. package/es/view/overlay/CanvasOverlay.js +172 -0
  260. package/es/view/overlay/CanvasOverlay.js.map +1 -0
  261. package/es/view/overlay/Grid.d.ts +30 -0
  262. package/es/view/overlay/Grid.js +118 -0
  263. package/es/view/overlay/Grid.js.map +1 -0
  264. package/es/view/overlay/ModificationOverlay.d.ts +9 -0
  265. package/es/view/overlay/ModificationOverlay.js +43 -0
  266. package/es/view/overlay/ModificationOverlay.js.map +1 -0
  267. package/es/view/overlay/OutlineOverlay.d.ts +14 -0
  268. package/es/view/overlay/OutlineOverlay.js +134 -0
  269. package/es/view/overlay/OutlineOverlay.js.map +1 -0
  270. package/es/view/overlay/SnaplineOverlay.d.ts +10 -0
  271. package/es/view/overlay/SnaplineOverlay.js +60 -0
  272. package/es/view/overlay/SnaplineOverlay.js.map +1 -0
  273. package/es/view/overlay/ToolOverlay.d.ts +19 -0
  274. package/es/view/overlay/ToolOverlay.js +76 -0
  275. package/es/view/overlay/ToolOverlay.js.map +1 -0
  276. package/{types → es}/view/overlay/getTransformHoc.d.ts +17 -14
  277. package/es/view/overlay/getTransformHoc.js +57 -0
  278. package/es/view/overlay/getTransformHoc.js.map +1 -0
  279. package/es/view/overlay/index.d.ts +8 -0
  280. package/es/view/overlay/index.js +9 -0
  281. package/es/view/overlay/index.js.map +1 -0
  282. package/es/view/shape/Circle.d.ts +2 -0
  283. package/es/view/shape/Circle.js +57 -0
  284. package/es/view/shape/Circle.js.map +1 -0
  285. package/es/view/shape/Ellipse.d.ts +2 -0
  286. package/es/view/shape/Ellipse.js +58 -0
  287. package/es/view/shape/Ellipse.js.map +1 -0
  288. package/es/view/shape/Line.d.ts +2 -0
  289. package/es/view/shape/Line.js +54 -0
  290. package/es/view/shape/Line.js.map +1 -0
  291. package/es/view/shape/Path.d.ts +6 -0
  292. package/es/view/shape/Path.js +43 -0
  293. package/es/view/shape/Path.js.map +1 -0
  294. package/es/view/shape/Polygon.d.ts +8 -0
  295. package/es/view/shape/Polygon.js +56 -0
  296. package/es/view/shape/Polygon.js.map +1 -0
  297. package/es/view/shape/Polyline.d.ts +2 -0
  298. package/es/view/shape/Polyline.js +49 -0
  299. package/es/view/shape/Polyline.js.map +1 -0
  300. package/es/view/shape/Rect.d.ts +15 -0
  301. package/es/view/shape/Rect.js +60 -0
  302. package/es/view/shape/Rect.js.map +1 -0
  303. package/es/view/shape/Text.d.ts +2 -0
  304. package/es/view/shape/Text.js +110 -0
  305. package/es/view/shape/Text.js.map +1 -0
  306. package/es/view/shape/index.d.ts +8 -0
  307. package/es/view/shape/index.js +9 -0
  308. package/es/view/shape/index.js.map +1 -0
  309. package/es/view/text/BaseText.d.ts +25 -0
  310. package/es/view/text/BaseText.js +114 -0
  311. package/es/view/text/BaseText.js.map +1 -0
  312. package/es/view/text/LineText.d.ts +9 -0
  313. package/es/view/text/LineText.js +149 -0
  314. package/es/view/text/LineText.js.map +1 -0
  315. package/es/view/text/index.d.ts +2 -0
  316. package/es/view/text/index.js +3 -0
  317. package/es/view/text/index.js.map +1 -0
  318. package/lib/LogicFlow.d.ts +966 -0
  319. package/lib/LogicFlow.js +1203 -0
  320. package/lib/LogicFlow.js.map +1 -0
  321. package/lib/algorithm/edge.d.ts +15 -0
  322. package/lib/algorithm/edge.js +62 -0
  323. package/lib/algorithm/edge.js.map +1 -0
  324. package/lib/algorithm/index.d.ts +6 -0
  325. package/lib/algorithm/index.js +75 -0
  326. package/lib/algorithm/index.js.map +1 -0
  327. package/lib/algorithm/outline.d.ts +7 -0
  328. package/lib/algorithm/outline.js +69 -0
  329. package/lib/algorithm/outline.js.map +1 -0
  330. package/lib/constant/index.d.ts +102 -0
  331. package/lib/constant/index.js +120 -0
  332. package/lib/constant/index.js.map +1 -0
  333. package/lib/event/eventArgs.d.ts +428 -0
  334. package/lib/event/eventArgs.js +3 -0
  335. package/lib/event/eventArgs.js.map +1 -0
  336. package/lib/event/eventEmitter.d.ts +48 -0
  337. package/lib/event/eventEmitter.js +95 -0
  338. package/lib/event/eventEmitter.js.map +1 -0
  339. package/lib/history/index.d.ts +23 -0
  340. package/lib/history/index.js +114 -0
  341. package/lib/history/index.js.map +1 -0
  342. package/lib/index.css +210 -0
  343. package/lib/index.d.ts +12 -0
  344. package/lib/index.js +58 -0
  345. package/lib/index.js.map +1 -0
  346. package/lib/index.less +1 -0
  347. package/lib/keyboard/index.d.ts +31 -0
  348. package/lib/keyboard/index.js +93 -0
  349. package/lib/keyboard/index.js.map +1 -0
  350. package/lib/keyboard/shortcut.d.ts +3 -0
  351. package/lib/keyboard/shortcut.js +120 -0
  352. package/lib/keyboard/shortcut.js.map +1 -0
  353. package/lib/model/BaseModel.d.ts +181 -0
  354. package/lib/model/BaseModel.js +3 -0
  355. package/lib/model/BaseModel.js.map +1 -0
  356. package/lib/model/EditConfigModel.d.ts +114 -0
  357. package/lib/model/EditConfigModel.js +195 -0
  358. package/lib/model/EditConfigModel.js.map +1 -0
  359. package/lib/model/GraphModel.d.ts +426 -0
  360. package/lib/model/GraphModel.js +1479 -0
  361. package/lib/model/GraphModel.js.map +1 -0
  362. package/lib/model/SnaplineModel.d.ts +34 -0
  363. package/lib/model/SnaplineModel.js +220 -0
  364. package/lib/model/SnaplineModel.js.map +1 -0
  365. package/lib/model/TransformModel.d.ts +101 -0
  366. package/lib/model/TransformModel.js +243 -0
  367. package/lib/model/TransformModel.js.map +1 -0
  368. package/lib/model/edge/BaseEdgeModel.d.ts +270 -0
  369. package/lib/model/edge/BaseEdgeModel.js +742 -0
  370. package/lib/model/edge/BaseEdgeModel.js.map +1 -0
  371. package/lib/model/edge/BezierEdgeModel.d.ts +63 -0
  372. package/lib/model/edge/BezierEdgeModel.js +250 -0
  373. package/lib/model/edge/BezierEdgeModel.js.map +1 -0
  374. package/lib/model/edge/LineEdgeModel.d.ts +19 -0
  375. package/lib/model/edge/LineEdgeModel.js +83 -0
  376. package/lib/model/edge/LineEdgeModel.js.map +1 -0
  377. package/lib/model/edge/PolylineEdgeModel.d.ts +85 -0
  378. package/lib/model/edge/PolylineEdgeModel.js +596 -0
  379. package/lib/model/edge/PolylineEdgeModel.js.map +1 -0
  380. package/lib/model/edge/index.d.ts +4 -0
  381. package/lib/model/edge/index.js +21 -0
  382. package/lib/model/edge/index.js.map +1 -0
  383. package/lib/model/index.d.ts +7 -0
  384. package/lib/model/index.js +24 -0
  385. package/lib/model/index.js.map +1 -0
  386. package/lib/model/node/BaseNodeModel.d.ts +260 -0
  387. package/lib/model/node/BaseNodeModel.js +886 -0
  388. package/lib/model/node/BaseNodeModel.js.map +1 -0
  389. package/lib/model/node/CircleNodeModel.d.ts +40 -0
  390. package/lib/model/node/CircleNodeModel.js +116 -0
  391. package/lib/model/node/CircleNodeModel.js.map +1 -0
  392. package/lib/model/node/DiamondNodeModel.d.ts +46 -0
  393. package/lib/model/node/DiamondNodeModel.js +193 -0
  394. package/lib/model/node/DiamondNodeModel.js.map +1 -0
  395. package/lib/model/node/EllipseNodeModel.d.ts +42 -0
  396. package/lib/model/node/EllipseNodeModel.js +124 -0
  397. package/lib/model/node/EllipseNodeModel.js.map +1 -0
  398. package/lib/model/node/HtmlNodeModel.d.ts +21 -0
  399. package/lib/model/node/HtmlNodeModel.js +65 -0
  400. package/lib/model/node/HtmlNodeModel.js.map +1 -0
  401. package/lib/model/node/PolygonNodeModel.d.ts +50 -0
  402. package/lib/model/node/PolygonNodeModel.js +202 -0
  403. package/lib/model/node/PolygonNodeModel.js.map +1 -0
  404. package/lib/model/node/RectNodeModel.d.ts +34 -0
  405. package/lib/model/node/RectNodeModel.js +86 -0
  406. package/lib/model/node/RectNodeModel.js.map +1 -0
  407. package/lib/model/node/TextNodeModel.d.ts +27 -0
  408. package/lib/model/node/TextNodeModel.js +119 -0
  409. package/lib/model/node/TextNodeModel.js.map +1 -0
  410. package/lib/model/node/index.d.ts +8 -0
  411. package/lib/model/node/index.js +25 -0
  412. package/lib/model/node/index.js.map +1 -0
  413. package/lib/options.d.ts +86 -0
  414. package/lib/options.js +77 -0
  415. package/lib/options.js.map +1 -0
  416. package/lib/style/index.css +210 -0
  417. package/lib/style/index.less +256 -0
  418. package/lib/style/raw.d.ts +4 -0
  419. package/lib/style/raw.js +9 -0
  420. package/lib/style/raw.js.map +1 -0
  421. package/lib/tool/MultipleSelectTool.d.ts +13 -0
  422. package/lib/tool/MultipleSelectTool.js +161 -0
  423. package/lib/tool/MultipleSelectTool.js.map +1 -0
  424. package/lib/tool/TextEditTool.d.ts +26 -0
  425. package/lib/tool/TextEditTool.js +190 -0
  426. package/lib/tool/TextEditTool.js.map +1 -0
  427. package/lib/tool/index.d.ts +2 -0
  428. package/lib/tool/index.js +19 -0
  429. package/lib/tool/index.js.map +1 -0
  430. package/lib/tool/snapline.d.ts +3 -0
  431. package/lib/tool/snapline.js +17 -0
  432. package/lib/tool/snapline.js.map +1 -0
  433. package/lib/tool/tool.d.ts +22 -0
  434. package/lib/tool/tool.js +49 -0
  435. package/lib/tool/tool.js.map +1 -0
  436. package/lib/util/animation.d.ts +12 -0
  437. package/lib/util/animation.js +24 -0
  438. package/lib/util/animation.js.map +1 -0
  439. package/lib/util/browser.d.ts +1 -0
  440. package/lib/util/browser.js +6 -0
  441. package/lib/util/browser.js.map +1 -0
  442. package/lib/util/compatible.d.ts +6 -0
  443. package/lib/util/compatible.js +21 -0
  444. package/lib/util/compatible.js.map +1 -0
  445. package/lib/util/drag.d.ts +47 -0
  446. package/lib/util/drag.js +142 -0
  447. package/lib/util/drag.js.map +1 -0
  448. package/lib/util/edge.d.ts +94 -0
  449. package/lib/util/edge.js +879 -0
  450. package/lib/util/edge.js.map +1 -0
  451. package/lib/util/geometry.d.ts +11 -0
  452. package/lib/util/geometry.js +78 -0
  453. package/lib/util/geometry.js.map +1 -0
  454. package/lib/util/graph.d.ts +13 -0
  455. package/lib/util/graph.js +59 -0
  456. package/lib/util/graph.js.map +1 -0
  457. package/lib/util/index.d.ts +16 -0
  458. package/lib/util/index.js +33 -0
  459. package/lib/util/index.js.map +1 -0
  460. package/lib/util/matrix.d.ts +32 -0
  461. package/lib/util/matrix.js +164 -0
  462. package/lib/util/matrix.js.map +1 -0
  463. package/lib/util/mobx.d.ts +2 -0
  464. package/lib/util/mobx.js +13 -0
  465. package/lib/util/mobx.js.map +1 -0
  466. package/lib/util/node.d.ts +69 -0
  467. package/lib/util/node.js +424 -0
  468. package/lib/util/node.js.map +1 -0
  469. package/lib/util/raf.d.ts +2 -0
  470. package/lib/util/raf.js +29 -0
  471. package/lib/util/raf.js.map +1 -0
  472. package/lib/util/sampling.d.ts +6 -0
  473. package/lib/util/sampling.js +72 -0
  474. package/lib/util/sampling.js.map +1 -0
  475. package/lib/util/theme.d.ts +4 -0
  476. package/lib/util/theme.js +160 -0
  477. package/lib/util/theme.js.map +1 -0
  478. package/lib/util/uuid.d.ts +7 -0
  479. package/lib/util/uuid.js +25 -0
  480. package/lib/util/uuid.js.map +1 -0
  481. package/lib/util/vector.d.ts +23 -0
  482. package/lib/util/vector.js +101 -0
  483. package/lib/util/vector.js.map +1 -0
  484. package/lib/util/zIndex.d.ts +2 -0
  485. package/lib/util/zIndex.js +10 -0
  486. package/lib/util/zIndex.js.map +1 -0
  487. package/lib/view/Anchor.d.ts +47 -0
  488. package/lib/view/Anchor.js +317 -0
  489. package/lib/view/Anchor.js.map +1 -0
  490. package/lib/view/Control.d.ts +100 -0
  491. package/lib/view/Control.js +327 -0
  492. package/lib/view/Control.js.map +1 -0
  493. package/lib/view/Graph.d.ts +18 -0
  494. package/lib/view/Graph.js +79 -0
  495. package/lib/view/Graph.js.map +1 -0
  496. package/lib/view/Rotate.d.ts +21 -0
  497. package/lib/view/Rotate.js +113 -0
  498. package/lib/view/Rotate.js.map +1 -0
  499. package/lib/view/behavior/dnd.d.ts +27 -0
  500. package/lib/view/behavior/dnd.js +113 -0
  501. package/lib/view/behavior/dnd.js.map +1 -0
  502. package/lib/view/edge/AdjustPoint.d.ts +50 -0
  503. package/lib/view/edge/AdjustPoint.js +371 -0
  504. package/lib/view/edge/AdjustPoint.js.map +1 -0
  505. package/lib/view/edge/Arrow.d.ts +25 -0
  506. package/lib/view/edge/Arrow.js +63 -0
  507. package/lib/view/edge/Arrow.js.map +1 -0
  508. package/lib/view/edge/BaseEdge.d.ts +148 -0
  509. package/lib/view/edge/BaseEdge.js +407 -0
  510. package/lib/view/edge/BaseEdge.js.map +1 -0
  511. package/lib/view/edge/BezierEdge.d.ts +26 -0
  512. package/lib/view/edge/BezierEdge.js +124 -0
  513. package/lib/view/edge/BezierEdge.js.map +1 -0
  514. package/{types/view/edge/BezierEdge.d.ts → lib/view/edge/LineEdge.d.ts} +9 -10
  515. package/lib/view/edge/LineEdge.js +84 -0
  516. package/lib/view/edge/LineEdge.js.map +1 -0
  517. package/lib/view/edge/PolylineEdge.d.ts +55 -0
  518. package/lib/view/edge/PolylineEdge.js +280 -0
  519. package/lib/view/edge/PolylineEdge.js.map +1 -0
  520. package/lib/view/edge/index.d.ts +6 -0
  521. package/lib/view/edge/index.js +23 -0
  522. package/lib/view/edge/index.js.map +1 -0
  523. package/lib/view/index.d.ts +7 -0
  524. package/lib/view/index.js +24 -0
  525. package/lib/view/index.js.map +1 -0
  526. package/lib/view/node/BaseNode.d.ts +49 -0
  527. package/lib/view/node/BaseNode.js +424 -0
  528. package/lib/view/node/BaseNode.js.map +1 -0
  529. package/lib/view/node/CircleNode.d.ts +10 -0
  530. package/lib/view/node/CircleNode.js +51 -0
  531. package/lib/view/node/CircleNode.js.map +1 -0
  532. package/lib/view/node/DiamondNode.d.ts +10 -0
  533. package/lib/view/node/DiamondNode.js +50 -0
  534. package/lib/view/node/DiamondNode.js.map +1 -0
  535. package/lib/view/node/EllipseNode.d.ts +10 -0
  536. package/lib/view/node/EllipseNode.js +50 -0
  537. package/lib/view/node/EllipseNode.js.map +1 -0
  538. package/lib/view/node/HtmlNode.d.ts +38 -0
  539. package/lib/view/node/HtmlNode.js +135 -0
  540. package/lib/view/node/HtmlNode.js.map +1 -0
  541. package/lib/view/node/PolygonNode.d.ts +10 -0
  542. package/lib/view/node/PolygonNode.js +54 -0
  543. package/lib/view/node/PolygonNode.js.map +1 -0
  544. package/lib/view/node/RectNode.d.ts +11 -0
  545. package/lib/view/node/RectNode.js +50 -0
  546. package/lib/view/node/RectNode.js.map +1 -0
  547. package/lib/view/node/TextNode.d.ts +12 -0
  548. package/lib/view/node/TextNode.js +61 -0
  549. package/lib/view/node/TextNode.js.map +1 -0
  550. package/lib/view/node/index.d.ts +8 -0
  551. package/lib/view/node/index.js +25 -0
  552. package/lib/view/node/index.js.map +1 -0
  553. package/lib/view/overlay/BackgroundOverlay.d.ts +28 -0
  554. package/lib/view/overlay/BackgroundOverlay.js +34 -0
  555. package/lib/view/overlay/BackgroundOverlay.js.map +1 -0
  556. package/lib/view/overlay/BezierAdjustOverlay.d.ts +31 -0
  557. package/lib/view/overlay/BezierAdjustOverlay.js +145 -0
  558. package/lib/view/overlay/BezierAdjustOverlay.js.map +1 -0
  559. package/lib/view/overlay/CanvasOverlay.d.ts +25 -0
  560. package/lib/view/overlay/CanvasOverlay.js +175 -0
  561. package/lib/view/overlay/CanvasOverlay.js.map +1 -0
  562. package/lib/view/overlay/Grid.d.ts +30 -0
  563. package/lib/view/overlay/Grid.js +121 -0
  564. package/lib/view/overlay/Grid.js.map +1 -0
  565. package/lib/view/overlay/ModificationOverlay.d.ts +9 -0
  566. package/lib/view/overlay/ModificationOverlay.js +46 -0
  567. package/lib/view/overlay/ModificationOverlay.js.map +1 -0
  568. package/lib/view/overlay/OutlineOverlay.d.ts +14 -0
  569. package/lib/view/overlay/OutlineOverlay.js +137 -0
  570. package/lib/view/overlay/OutlineOverlay.js.map +1 -0
  571. package/lib/view/overlay/SnaplineOverlay.d.ts +10 -0
  572. package/lib/view/overlay/SnaplineOverlay.js +66 -0
  573. package/lib/view/overlay/SnaplineOverlay.js.map +1 -0
  574. package/lib/view/overlay/ToolOverlay.d.ts +19 -0
  575. package/lib/view/overlay/ToolOverlay.js +79 -0
  576. package/lib/view/overlay/ToolOverlay.js.map +1 -0
  577. package/lib/view/overlay/getTransformHoc.d.ts +37 -0
  578. package/lib/view/overlay/getTransformHoc.js +61 -0
  579. package/lib/view/overlay/getTransformHoc.js.map +1 -0
  580. package/lib/view/overlay/index.d.ts +8 -0
  581. package/lib/view/overlay/index.js +25 -0
  582. package/lib/view/overlay/index.js.map +1 -0
  583. package/lib/view/shape/Circle.d.ts +2 -0
  584. package/lib/view/shape/Circle.js +61 -0
  585. package/lib/view/shape/Circle.js.map +1 -0
  586. package/lib/view/shape/Ellipse.d.ts +2 -0
  587. package/lib/view/shape/Ellipse.js +62 -0
  588. package/lib/view/shape/Ellipse.js.map +1 -0
  589. package/lib/view/shape/Line.d.ts +2 -0
  590. package/lib/view/shape/Line.js +58 -0
  591. package/lib/view/shape/Line.js.map +1 -0
  592. package/lib/view/shape/Path.d.ts +6 -0
  593. package/lib/view/shape/Path.js +47 -0
  594. package/lib/view/shape/Path.js.map +1 -0
  595. package/lib/view/shape/Polygon.d.ts +8 -0
  596. package/lib/view/shape/Polygon.js +60 -0
  597. package/lib/view/shape/Polygon.js.map +1 -0
  598. package/lib/view/shape/Polyline.d.ts +2 -0
  599. package/lib/view/shape/Polyline.js +53 -0
  600. package/lib/view/shape/Polyline.js.map +1 -0
  601. package/lib/view/shape/Rect.d.ts +15 -0
  602. package/lib/view/shape/Rect.js +64 -0
  603. package/lib/view/shape/Rect.js.map +1 -0
  604. package/lib/view/shape/Text.d.ts +2 -0
  605. package/lib/view/shape/Text.js +114 -0
  606. package/lib/view/shape/Text.js.map +1 -0
  607. package/lib/view/shape/index.d.ts +8 -0
  608. package/lib/view/shape/index.js +25 -0
  609. package/lib/view/shape/index.js.map +1 -0
  610. package/lib/view/text/BaseText.d.ts +25 -0
  611. package/lib/view/text/BaseText.js +117 -0
  612. package/lib/view/text/BaseText.js.map +1 -0
  613. package/lib/view/text/LineText.d.ts +9 -0
  614. package/lib/view/text/LineText.js +155 -0
  615. package/lib/view/text/LineText.js.map +1 -0
  616. package/lib/view/text/index.d.ts +2 -0
  617. package/lib/view/text/index.js +19 -0
  618. package/lib/view/text/index.js.map +1 -0
  619. package/package.json +41 -88
  620. package/rollup.config.js +15 -0
  621. package/src/LogicFlow.tsx +1831 -0
  622. package/src/algorithm/edge.ts +68 -0
  623. package/src/algorithm/index.ts +68 -0
  624. package/src/algorithm/outline.ts +77 -0
  625. package/src/constant/index.ts +127 -0
  626. package/src/event/event.md +66 -0
  627. package/src/event/eventArgs.ts +476 -0
  628. package/src/event/eventEmitter.ts +153 -0
  629. package/src/history/index.ts +112 -0
  630. package/src/index.less +1 -0
  631. package/src/index.ts +21 -0
  632. package/src/keyboard/index.ts +106 -0
  633. package/src/keyboard/shortcut.ts +123 -0
  634. package/src/model/BaseModel.ts +223 -0
  635. package/src/model/EditConfigModel.ts +215 -0
  636. package/src/model/GraphModel.ts +1516 -0
  637. package/src/model/SnaplineModel.ts +238 -0
  638. package/src/model/TransformModel.ts +258 -0
  639. package/src/model/edge/BaseEdgeModel.ts +688 -0
  640. package/src/model/edge/BezierEdgeModel.ts +196 -0
  641. package/src/model/edge/LineEdgeModel.ts +26 -0
  642. package/src/model/edge/PolylineEdgeModel.ts +656 -0
  643. package/src/model/edge/index.ts +4 -0
  644. package/src/model/index.ts +8 -0
  645. package/src/model/node/BaseNodeModel.ts +839 -0
  646. package/src/model/node/CircleNodeModel.ts +89 -0
  647. package/src/model/node/DiamondNodeModel.ts +128 -0
  648. package/src/model/node/EllipseNodeModel.ts +94 -0
  649. package/src/model/node/HtmlNodeModel.ts +49 -0
  650. package/src/model/node/PolygonNodeModel.ts +147 -0
  651. package/src/model/node/RectNodeModel.ts +57 -0
  652. package/src/model/node/TextNodeModel.ts +41 -0
  653. package/src/model/node/index.ts +8 -0
  654. package/src/options.ts +173 -0
  655. package/src/style/index.less +256 -0
  656. package/src/style/raw.ts +217 -0
  657. package/src/tool/MultipleSelectTool.tsx +132 -0
  658. package/src/tool/TextEditTool.tsx +193 -0
  659. package/src/tool/index.ts +2 -0
  660. package/src/tool/snapline.ts +17 -0
  661. package/src/tool/tool.ts +66 -0
  662. package/src/typings.d.ts +5 -0
  663. package/src/util/animation.ts +29 -0
  664. package/src/util/browser.ts +4 -0
  665. package/src/util/compatible.ts +15 -0
  666. package/src/util/drag.ts +186 -0
  667. package/src/util/edge.ts +1034 -0
  668. package/src/util/geometry.ts +53 -0
  669. package/src/util/graph.ts +46 -0
  670. package/src/util/index.ts +16 -0
  671. package/src/util/matrix.ts +129 -0
  672. package/src/util/mobx.ts +23 -0
  673. package/src/util/node.ts +519 -0
  674. package/src/util/raf.ts +28 -0
  675. package/src/util/sampling.ts +85 -0
  676. package/src/util/theme.ts +180 -0
  677. package/src/util/uuid.ts +26 -0
  678. package/src/util/vector.ts +93 -0
  679. package/src/util/zIndex.ts +6 -0
  680. package/src/view/Anchor.tsx +407 -0
  681. package/src/view/Control.tsx +446 -0
  682. package/src/view/Graph.tsx +104 -0
  683. package/src/view/Rotate.tsx +112 -0
  684. package/src/view/behavior/dnd.ts +116 -0
  685. package/src/view/edge/AdjustPoint.tsx +439 -0
  686. package/src/view/edge/Arrow.tsx +54 -0
  687. package/src/view/edge/BaseEdge.tsx +489 -0
  688. package/src/view/edge/BezierEdge.tsx +101 -0
  689. package/src/view/edge/LineEdge.tsx +81 -0
  690. package/src/view/edge/PolylineEdge.tsx +299 -0
  691. package/src/view/edge/index.ts +6 -0
  692. package/src/view/index.ts +8 -0
  693. package/src/view/node/BaseNode.tsx +494 -0
  694. package/src/view/node/CircleNode.tsx +19 -0
  695. package/src/view/node/DiamondNode.tsx +22 -0
  696. package/src/view/node/EllipseNode.tsx +20 -0
  697. package/src/view/node/HtmlNode.tsx +92 -0
  698. package/src/view/node/PolygonNode.tsx +26 -0
  699. package/src/view/node/RectNode.tsx +28 -0
  700. package/src/view/node/TextNode.tsx +37 -0
  701. package/src/view/node/index.ts +8 -0
  702. package/src/view/overlay/BackgroundOverlay.tsx +39 -0
  703. package/src/view/overlay/BezierAdjustOverlay.tsx +150 -0
  704. package/src/view/overlay/CanvasOverlay.tsx +180 -0
  705. package/src/view/overlay/Grid.tsx +135 -0
  706. package/src/view/overlay/ModificationOverlay.tsx +31 -0
  707. package/src/view/overlay/OutlineOverlay.tsx +170 -0
  708. package/src/view/overlay/SnaplineOverlay.tsx +44 -0
  709. package/src/view/overlay/ToolOverlay.tsx +65 -0
  710. package/src/view/overlay/getTransformHoc.tsx +50 -0
  711. package/src/view/overlay/index.ts +8 -0
  712. package/src/view/shape/Circle.tsx +27 -0
  713. package/src/view/shape/Ellipse.tsx +28 -0
  714. package/src/view/shape/Line.tsx +24 -0
  715. package/src/view/shape/Path.tsx +19 -0
  716. package/src/view/shape/Polygon.tsx +36 -0
  717. package/src/view/shape/Polyline.tsx +19 -0
  718. package/src/view/shape/Rect.tsx +44 -0
  719. package/src/view/shape/Text.tsx +138 -0
  720. package/src/view/shape/index.ts +8 -0
  721. package/src/view/text/BaseText.tsx +96 -0
  722. package/src/view/text/LineText.tsx +154 -0
  723. package/src/view/text/index.ts +2 -0
  724. package/tsconfig.json +18 -0
  725. package/dist/entry.js +0 -7
  726. package/dist/logic-flow.js +0 -23
  727. package/dist/logic-flow.min.js +0 -23
  728. package/types/LogicFlow.d.ts +0 -581
  729. package/types/algorithm/edge.d.ts +0 -6
  730. package/types/algorithm/outline.d.ts +0 -35
  731. package/types/constant/DefaultAnimation.d.ts +0 -12
  732. package/types/constant/DefaultTheme.d.ts +0 -270
  733. package/types/event/eventEmitter.d.ts +0 -36
  734. package/types/history/History.d.ts +0 -20
  735. package/types/model/BaseModel.d.ts +0 -99
  736. package/types/model/SnaplineModel.d.ts +0 -33
  737. package/types/model/edge/BezierEdgeModel.d.ts +0 -51
  738. package/types/model/edge/LineEdgeModel.d.ts +0 -14
  739. package/types/model/edge/PolylineEdgeModel.d.ts +0 -63
  740. package/types/model/node/BaseNodeModel.d.ts +0 -232
  741. package/types/model/node/CircleNodeModel.d.ts +0 -21
  742. package/types/model/node/DiamondNodeModel.d.ts +0 -25
  743. package/types/model/node/EllipseNodeModel.d.ts +0 -22
  744. package/types/model/node/HtmlNodeModel.d.ts +0 -12
  745. package/types/model/node/PolygonNodeModel.d.ts +0 -28
  746. package/types/model/node/RectNodeModel.d.ts +0 -19
  747. package/types/model/node/TextNodeModel.d.ts +0 -19
  748. package/types/options.d.ts +0 -240
  749. package/types/tool/MultipleSelectTool.d.ts +0 -20
  750. package/types/tool/TextEditTool.d.ts +0 -34
  751. package/types/tool/index.d.ts +0 -13
  752. package/types/type/index.d.ts +0 -429
  753. package/types/util/animation.d.ts +0 -2
  754. package/types/util/compatible.d.ts +0 -1
  755. package/types/util/drag.d.ts +0 -38
  756. package/types/util/edge.d.ts +0 -108
  757. package/types/util/geometry.d.ts +0 -2
  758. package/types/util/index.d.ts +0 -7
  759. package/types/util/node.d.ts +0 -66
  760. package/types/util/raf.d.ts +0 -2
  761. package/types/util/theme.d.ts +0 -2
  762. package/types/util/uuid.d.ts +0 -6
  763. package/types/view/Anchor.d.ts +0 -54
  764. package/types/view/Graph.d.ts +0 -21
  765. package/types/view/basic-shape/Circle.d.ts +0 -2
  766. package/types/view/basic-shape/Ellipse.d.ts +0 -2
  767. package/types/view/basic-shape/Line.d.ts +0 -3
  768. package/types/view/basic-shape/LinearGradient.d.ts +0 -1
  769. package/types/view/basic-shape/Path.d.ts +0 -7
  770. package/types/view/basic-shape/Polygon.d.ts +0 -2
  771. package/types/view/basic-shape/Polyline.d.ts +0 -3
  772. package/types/view/basic-shape/Rect.d.ts +0 -14
  773. package/types/view/basic-shape/Text.d.ts +0 -2
  774. package/types/view/behavior/DnD.d.ts +0 -35
  775. package/types/view/behavior/Transform.d.ts +0 -4
  776. package/types/view/edge/AdjustPoint.d.ts +0 -56
  777. package/types/view/edge/Arrow.d.ts +0 -24
  778. package/types/view/edge/index.d.ts +0 -6
  779. package/types/view/index.d.ts +0 -2
  780. package/types/view/node/BaseNode.d.ts +0 -57
  781. package/types/view/node/CircleNode.d.ts +0 -5
  782. package/types/view/node/DiamondNode.d.ts +0 -5
  783. package/types/view/node/EllipseNode.d.ts +0 -5
  784. package/types/view/node/PolygonNode.d.ts +0 -5
  785. package/types/view/node/RectNode.d.ts +0 -5
  786. package/types/view/node/TextNode.d.ts +0 -6
  787. package/types/view/node/index.d.ts +0 -9
  788. package/types/view/overlay/BezierAdjustOverlay.d.ts +0 -12
  789. package/types/view/overlay/Grid.d.ts +0 -30
  790. package/types/view/overlay/HtmlOverlay.d.ts +0 -15
  791. package/types/view/overlay/ModificationOverlay.d.ts +0 -9
  792. package/types/view/overlay/OutlineOverlay.d.ts +0 -17
  793. package/types/view/overlay/SnaplineOverlay.d.ts +0 -9
  794. package/types/view/overlay/ToolOverlay.d.ts +0 -17
  795. package/types/view/text/BaseText.d.ts +0 -29
  796. package/types/view/text/LineText.d.ts +0 -9
  797. /package/{types → es}/algorithm/index.d.ts +0 -0
  798. /package/{types → es}/keyboard/shortcut.d.ts +0 -0
  799. /package/{types → es}/model/edge/index.d.ts +0 -0
  800. /package/{types → es}/model/index.d.ts +0 -0
  801. /package/{types → es}/model/node/index.d.ts +0 -0
  802. /package/{types → es}/util/browser.d.ts +0 -0
  803. /package/{types → es}/util/mobx.d.ts +0 -0
  804. /package/{types → es}/util/zIndex.d.ts +0 -0
@@ -0,0 +1,839 @@
1
+ import { action, computed, isObservable, observable, toJS } from 'mobx'
2
+ import { assign, cloneDeep, has, isNil, mapKeys } from 'lodash-es'
3
+ import { GraphModel, Model } from '..'
4
+ import LogicFlow from '../../LogicFlow'
5
+ import {
6
+ createUuid,
7
+ formatData,
8
+ getClosestAnchor,
9
+ getZIndex,
10
+ Matrix,
11
+ pickNodeConfig,
12
+ TranslateMatrix,
13
+ } from '../../util'
14
+ import {
15
+ ElementState,
16
+ ElementType,
17
+ EventType,
18
+ ModelType,
19
+ OverlapMode,
20
+ } from '../../constant'
21
+ import { ResizeControl } from '../../view/Control'
22
+ import AnchorConfig = Model.AnchorConfig
23
+ import GraphElements = LogicFlow.GraphElements
24
+ import TextConfig = LogicFlow.TextConfig
25
+ import NodeConfig = LogicFlow.NodeConfig
26
+ import NodeData = LogicFlow.NodeData
27
+ import Point = LogicFlow.Point
28
+ import CommonTheme = LogicFlow.CommonTheme
29
+
30
+ import ResizeInfo = ResizeControl.ResizeInfo
31
+ import ResizeNodeData = ResizeControl.ResizeNodeData
32
+ import PCTResizeParams = ResizeControl.PCTResizeParams
33
+
34
+ export interface IBaseNodeModel extends Model.BaseModel {
35
+ /**
36
+ * model基础类型,固定为node
37
+ */
38
+ readonly BaseType: ElementType.NODE
39
+
40
+ isDragging: boolean
41
+ isShowAnchor: boolean
42
+ getNodeStyle: () => CommonTheme
43
+ getTextStyle: () => LogicFlow.TextNodeTheme
44
+
45
+ setIsShowAnchor: (isShowAnchor: boolean) => void
46
+ }
47
+
48
+ export class BaseNodeModel implements IBaseNodeModel {
49
+ readonly BaseType = ElementType.NODE
50
+ static BaseType: ElementType = ElementType.NODE
51
+
52
+ // 数据属性
53
+ public id = ''
54
+ @observable readonly type = ''
55
+ @observable x = 0
56
+ @observable y = 0
57
+ @observable text: TextConfig = {
58
+ value: '',
59
+ x: 0,
60
+ y: 0,
61
+ draggable: false,
62
+ editable: true,
63
+ }
64
+ @observable properties: Record<string, unknown> = {}
65
+ // 形状属性
66
+ @observable private _width = 100
67
+ public get width() {
68
+ return this._width
69
+ }
70
+
71
+ public set width(value: number) {
72
+ this._width = value
73
+ }
74
+
75
+ @observable private _height = 80
76
+ public get height() {
77
+ return this._height
78
+ }
79
+
80
+ public set height(value: number) {
81
+ this._height = value
82
+ }
83
+
84
+ minWidth: number = 30
85
+ minHeight: number = 30
86
+ maxWidth: number = 2000
87
+ maxHeight: number = 2000
88
+ PCTResizeInfo?: PCTResizeParams
89
+
90
+ // 根据与 (x, y) 的偏移量计算 anchors 的坐标
91
+ @observable anchorsOffset: BaseNodeModel.AnchorsOffsetItem[] = []
92
+
93
+ // 状态属性
94
+ readonly virtual: boolean = false
95
+ @observable isSelected = false
96
+ @observable isHovered = false
97
+ @observable isShowAnchor = false
98
+ @observable isDragging = false
99
+ @observable isHitable = true // TODO: 兼容拼写错误的情况 Remove
100
+ @observable isHittable = true // 细粒度控制节点是否对用户操作进行反应
101
+ @observable draggable = true
102
+ @observable visible = true
103
+ @observable enableRotate = true
104
+ @observable enableResize = true
105
+
106
+ // 其它属性
107
+ graphModel: GraphModel
108
+ @observable zIndex = 1
109
+ @observable state = ElementState.DEFAULT
110
+ @observable autoToFront = true // 节点选中时是否自动置顶,默认为true.
111
+ @observable style: CommonTheme = {} // 每个节点自己的样式,动态修改
112
+
113
+ // TODO: 利用向量计算实现 平移、旋转、缩放 等操作,利用 svg 的 transform 属性
114
+ @observable transform!: string // 节点的transform属性
115
+ @observable private _rotate = 0
116
+ get rotate() {
117
+ return this._rotate
118
+ }
119
+
120
+ set rotate(value: number) {
121
+ this._rotate = value
122
+ const { x = 0, y = 0 } = this
123
+ this.transform = new TranslateMatrix(-x, -y)
124
+ .rotate(value)
125
+ .translate(x, y)
126
+ .toString()
127
+ }
128
+
129
+ modelType = ModelType.NODE
130
+ additionStateData?: Model.AdditionStateDataType = {}
131
+
132
+ // 节点连入、练出、移动等规则
133
+ targetRules: Model.ConnectRule[] = []
134
+ sourceRules: Model.ConnectRule[] = []
135
+ moveRules: Model.NodeMoveRule[] = [] // 节点移动之前的hook
136
+ hasSetTargetRules = false // 用来限制rules的重复值
137
+ hasSetSourceRules = false; // 用来限制rules的重复值
138
+ [propName: string]: any // 支持用户自定义属性
139
+
140
+ constructor(data: NodeConfig, graphModel: GraphModel) {
141
+ this.graphModel = graphModel
142
+ this.properties = data.properties || {}
143
+
144
+ this.initNodeData(data)
145
+ this.setAttributes()
146
+ }
147
+
148
+ /**
149
+ * 获取进入当前节点的边和节点
150
+ */
151
+ @computed get incoming(): GraphElements {
152
+ return {
153
+ nodes: this.graphModel.getNodeIncomingNode(this.id),
154
+ edges: this.graphModel.getNodeIncomingEdge(this.id),
155
+ }
156
+ }
157
+
158
+ /*
159
+ * 获取离开当前节点的边和节点
160
+ */
161
+ @computed get outgoing(): GraphElements {
162
+ return {
163
+ nodes: this.graphModel.getNodeOutgoingNode(this.id),
164
+ edges: this.graphModel.getNodeOutgoingEdge(this.id),
165
+ }
166
+ }
167
+
168
+ /**
169
+ * @overridable 可以重写
170
+ * 初始化节点数据
171
+ * initNodeData和setAttributes的区别在于
172
+ * initNodeData只在节点初始化的时候调用,用于初始化节点的所有属性。
173
+ * setAttributes除了初始化调用外,还会在properties发生变化了调用。
174
+ */
175
+ public initNodeData(data: NodeConfig) {
176
+ if (!data.properties) {
177
+ data.properties = {}
178
+ }
179
+
180
+ if (!data.id) {
181
+ // 自定义节点id > 全局定义id > 内置
182
+ const { idGenerator } = this.graphModel
183
+ const globalId = idGenerator && idGenerator(data.type)
184
+ const nodeId = this.createId()
185
+ data.id = nodeId || globalId || createUuid()
186
+ }
187
+
188
+ this.formatText(data)
189
+ assign(this, pickNodeConfig(data)) // TODO: 确认 constructor 中赋值 properties 是否必要
190
+ const { overlapMode } = this.graphModel
191
+ if (overlapMode === OverlapMode.INCREASE) {
192
+ this.zIndex = data.zIndex || getZIndex()
193
+ }
194
+ }
195
+
196
+ /**
197
+ * 设置model属性,每次properties发生变化会触发
198
+ * 例如设置节点的宽度
199
+ * @example
200
+ *
201
+ * setAttributes () {
202
+ * this.width = 300
203
+ * this.height = 200
204
+ * }
205
+ *
206
+ * @overridable 支持重写
207
+ */
208
+ public setAttributes() {}
209
+
210
+ /**
211
+ * @overridable 支持重写,自定义此类型节点默认生成方式
212
+ * @returns string | null
213
+ */
214
+ public createId(): string | null {
215
+ return null
216
+ }
217
+
218
+ /**
219
+ * 始化文本属性
220
+ */
221
+ private formatText(data: NodeConfig): void {
222
+ if (!data.text) {
223
+ data.text = {
224
+ value: '',
225
+ x: data.x,
226
+ y: data.y,
227
+ draggable: false,
228
+ editable: true,
229
+ }
230
+ } else {
231
+ if (typeof data.text === 'string') {
232
+ data.text = {
233
+ value: data.text,
234
+ x: data.x,
235
+ y: data.y,
236
+ draggable: false,
237
+ editable: true,
238
+ }
239
+ } else {
240
+ data.text.editable = data.text.editable ?? true
241
+ }
242
+ }
243
+ }
244
+
245
+ /**
246
+ * @overridable 支持重写
247
+ * 计算节点 resize 时
248
+ */
249
+ resize(resizeInfo: ResizeInfo): ResizeNodeData {
250
+ const { width, height, deltaX, deltaY } = resizeInfo
251
+ // 移动节点以及文本内容
252
+ this.move(deltaX / 2, deltaY / 2)
253
+
254
+ this.width = width
255
+ this.height = height
256
+ this.setProperties({
257
+ width,
258
+ height,
259
+ })
260
+
261
+ return this.getData()
262
+ }
263
+
264
+ // TODO: 等比例缩放
265
+ proportionalResize() {}
266
+
267
+ /**
268
+ * 获取被保存时返回的数据
269
+ * @overridable 支持重写
270
+ */
271
+ getData(): NodeData {
272
+ const { x, y, value } = this.text
273
+ let { properties } = this
274
+ if (isObservable(properties)) {
275
+ properties = toJS(properties)
276
+ }
277
+ const data: NodeData = {
278
+ id: this.id,
279
+ type: this.type,
280
+ x: this.x,
281
+ y: this.y,
282
+ properties,
283
+ }
284
+ if (this.rotate) {
285
+ data.rotate = this.rotate
286
+ }
287
+ if (this.graphModel.overlapMode === OverlapMode.INCREASE) {
288
+ data.zIndex = this.zIndex
289
+ }
290
+ if (value) {
291
+ data.text = {
292
+ x,
293
+ y,
294
+ value,
295
+ }
296
+ }
297
+ return data
298
+ }
299
+
300
+ /**
301
+ * 用于在历史记录时获取节点数据,
302
+ * 在某些情况下,如果希望某个属性变化不引起history的变化,
303
+ * 可以重写此方法。
304
+ */
305
+ getHistoryData(): NodeData {
306
+ return this.getData()
307
+ }
308
+
309
+ /**
310
+ * 获取当前节点的properties
311
+ */
312
+ getProperties() {
313
+ return toJS(this.properties)
314
+ }
315
+
316
+ /**
317
+ * @overridable 支持重写
318
+ * 获取当前节点最外层g标签Attributes, 例如 className
319
+ * @returns 自定义节点样式
320
+ */
321
+ getOuterGAttributes(): LogicFlow.DomAttributes {
322
+ return {
323
+ className: '',
324
+ }
325
+ }
326
+
327
+ /**
328
+ * @overridable 支持重写
329
+ * 获取当前节点样式
330
+ * @returns 自定义节点样式
331
+ */
332
+ getNodeStyle(): CommonTheme {
333
+ return {
334
+ ...this.graphModel.theme.baseNode,
335
+ ...this.style,
336
+ }
337
+ }
338
+
339
+ /**
340
+ * @overridable 支持重写
341
+ * 获取当前节点文本样式
342
+ */
343
+ getTextStyle() {
344
+ // 透传 nodeText
345
+ const { nodeText } = this.graphModel.theme
346
+ return cloneDeep(nodeText)
347
+ }
348
+
349
+ /**
350
+ * @overridable 支持重写
351
+ * 获取当前节点旋转控制点的样式
352
+ */
353
+ getRotateControlStyle(): CommonTheme {
354
+ const { rotateControl } = this.graphModel.theme
355
+ return cloneDeep(rotateControl)
356
+ }
357
+
358
+ /**
359
+ * @overrideable 支持重写
360
+ * 获取当前节点缩放控制节点的样式
361
+ */
362
+ getResizeControlStyle() {
363
+ const { resizeControl } = this.graphModel.theme
364
+ return cloneDeep(resizeControl)
365
+ }
366
+
367
+ getResizeOutlineStyle() {
368
+ const { resizeOutline } = this.graphModel.theme
369
+ return cloneDeep(resizeOutline)
370
+ }
371
+
372
+ /**
373
+ * @overridable 支持重写
374
+ * 获取当前节点锚点样式
375
+ * @returns 自定义样式
376
+ */
377
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
378
+ getAnchorStyle(_anchorInfo?: Point): LogicFlow.AnchorTheme {
379
+ const { anchor } = this.graphModel.theme
380
+ // 防止被重写覆盖主题。
381
+ return cloneDeep(anchor)
382
+ }
383
+
384
+ /**
385
+ * @overridable 支持重写
386
+ * 获取当前节点锚点拖出连线样式
387
+ * @returns 自定义锚点拖出样式
388
+ */
389
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
390
+ getAnchorLineStyle(_anchorInfo?: Point): LogicFlow.AnchorLineTheme {
391
+ const { anchorLine } = this.graphModel.theme
392
+ return cloneDeep(anchorLine)
393
+ }
394
+
395
+ /**
396
+ * @overridable 支持重写
397
+ * 获取outline样式,重写可以定义此类型节点outline样式, 默认使用主题样式
398
+ * @returns 自定义outline样式
399
+ */
400
+ getOutlineStyle(): LogicFlow.OutlineTheme {
401
+ const { outline } = this.graphModel.theme
402
+ return cloneDeep(outline)
403
+ }
404
+
405
+ /**
406
+ * @overridable 在连接边时,是否允许这个节点为 source 节点,边到 target 节点
407
+ * @param target 目标节点
408
+ * @param sourceAnchor 源锚点
409
+ * @param targetAnchor 目标锚点
410
+ * @param edgeId 调整后边的 id,在开启 adjustEdgeStartAndEnd 后调整边连接的节点时会传入
411
+ * 详见:https://github.com/didi/LogicFlow/issues/926#issuecomment-1371823306
412
+ */
413
+ isAllowConnectedAsSource(
414
+ target: BaseNodeModel,
415
+ sourceAnchor?: Model.AnchorConfig,
416
+ targetAnchor?: Model.AnchorConfig,
417
+ edgeId?: string,
418
+ ): Model.ConnectRuleResult {
419
+ const rules = !this.hasSetSourceRules
420
+ ? this.getConnectedSourceRules()
421
+ : this.sourceRules
422
+ this.hasSetSourceRules = true
423
+ let isAllPass = true
424
+ let msg: string = ''
425
+ for (let i = 0; i < rules.length; i++) {
426
+ const rule = rules[i]
427
+ if (
428
+ !rule.validate.call(
429
+ this,
430
+ this,
431
+ target,
432
+ sourceAnchor,
433
+ targetAnchor,
434
+ edgeId,
435
+ )
436
+ ) {
437
+ isAllPass = false
438
+ msg = rule.message
439
+ break
440
+ }
441
+ }
442
+ return {
443
+ isAllPass,
444
+ msg,
445
+ }
446
+ }
447
+
448
+ /**
449
+ * 获取当前节点作为连接的起始节点规则。
450
+ */
451
+ getConnectedSourceRules(): Model.ConnectRule[] {
452
+ return this.sourceRules
453
+ }
454
+
455
+ /**
456
+ * @overridable 在连线时,判断是否允许这个节点为 target 节点
457
+ * @param source 源节点
458
+ * @param sourceAnchor 源锚点
459
+ * @param targetAnchor 目标锚点
460
+ * @param edgeId 调整后边的 id,在开启 adjustEdgeStartAndEnd 后调整边连接的节点时会传入
461
+ * 详见:https://github.com/didi/LogicFlow/issues/926#issuecomment-1371823306
462
+ */
463
+ isAllowConnectedAsTarget(
464
+ source: BaseNodeModel,
465
+ sourceAnchor?: Model.AnchorConfig,
466
+ targetAnchor?: Model.AnchorConfig,
467
+ edgeId?: string,
468
+ ): Model.ConnectRuleResult {
469
+ const rules = !this.hasSetTargetRules
470
+ ? this.getConnectedTargetRules()
471
+ : this.targetRules
472
+ this.hasSetTargetRules = true
473
+ let isAllPass = true
474
+ let msg: string = ''
475
+ for (let i = 0; i < rules.length; i++) {
476
+ const rule = rules[i]
477
+ if (
478
+ !rule.validate.call(
479
+ this,
480
+ source,
481
+ this,
482
+ sourceAnchor,
483
+ targetAnchor,
484
+ edgeId,
485
+ )
486
+ ) {
487
+ isAllPass = false
488
+ msg = rule.message
489
+ break
490
+ }
491
+ }
492
+ return {
493
+ isAllPass,
494
+ msg,
495
+ }
496
+ }
497
+
498
+ /**
499
+ * 内部方法
500
+ * 是否允许移动节点到新的位置
501
+ */
502
+ isAllowMoveNode(deltaX: number, deltaY: number): boolean | Model.IsAllowMove {
503
+ let isAllowMoveX = true
504
+ let isAllowMoveY = true
505
+ const rules = this.moveRules.concat(this.graphModel.nodeMoveRules)
506
+ for (const rule of rules) {
507
+ const r = rule(this, deltaX, deltaY)
508
+ if (!r) return false
509
+ if (typeof r === 'object') {
510
+ const r1 = r as Model.IsAllowMove
511
+ if (!r1.x && !r1.y) {
512
+ return false
513
+ }
514
+ isAllowMoveX = isAllowMoveX && r1.x
515
+ isAllowMoveY = isAllowMoveY && r1.y
516
+ }
517
+ }
518
+ return {
519
+ x: isAllowMoveX,
520
+ y: isAllowMoveY,
521
+ }
522
+ }
523
+
524
+ /**
525
+ * 获取作为连线终点时的所有规则。
526
+ */
527
+ getConnectedTargetRules(): Model.ConnectRule[] {
528
+ return this.targetRules
529
+ }
530
+
531
+ /**
532
+ * @returns Point[] 锚点坐标构成的数组
533
+ */
534
+ getAnchorsByOffset(): Model.AnchorConfig[] {
535
+ const { anchorsOffset, id, x, y } = this
536
+ if (anchorsOffset && anchorsOffset.length > 0) {
537
+ return anchorsOffset.map((el, idx) => {
538
+ if (el.length) {
539
+ el = el as LogicFlow.PointTuple // 历史数据格式
540
+ return {
541
+ id: `${id}_${idx}`,
542
+ x: x + el[0],
543
+ y: y + el[1],
544
+ }
545
+ }
546
+ el = el as Model.AnchorConfig
547
+ return {
548
+ ...el,
549
+ x: x + el.x,
550
+ y: y + el.y,
551
+ id: el.id || `${id}_${idx}`,
552
+ }
553
+ })
554
+ }
555
+ return this.getDefaultAnchor()
556
+ }
557
+
558
+ /**
559
+ * @overridable 子类重写此方法设置默认锚点
560
+ * 获取节点默认情况下的锚点
561
+ */
562
+ public getDefaultAnchor(): Model.AnchorConfig[] {
563
+ return []
564
+ }
565
+
566
+ /**
567
+ * @overridable 子类重写此方法获取手动连接边到节点时,需要连接的锚点
568
+ * 手动连接边到节点时,需要连接的锚点
569
+ */
570
+ public getTargetAnchor(position: Point): Model.AnchorInfo {
571
+ return getClosestAnchor(position, this)
572
+ }
573
+
574
+ /**
575
+ * 获取节点BBox
576
+ */
577
+ public getBounds(): Model.BoxBoundsPoint {
578
+ return {
579
+ x1: this.x - this.width / 2,
580
+ y1: this.y - this.height / 2,
581
+ x2: this.x + this.width / 2,
582
+ y2: this.y + this.height / 2,
583
+ }
584
+ }
585
+
586
+ get anchors(): Model.AnchorConfig[] {
587
+ const anchors = this.getAnchorsByOffset()
588
+ const { x, y, rotate } = this
589
+ anchors.forEach((anchor) => {
590
+ const { x: anchorX, y: anchorY } = anchor
591
+ const [e, f] = new Matrix([anchorX, anchorY, 1])
592
+ .translate(-x, -y)
593
+ .rotate(rotate)
594
+ .translate(x, y)[0]
595
+ anchor.x = e
596
+ anchor.y = f
597
+ })
598
+ return anchors
599
+ }
600
+
601
+ getAnchorInfo(anchorId: string | undefined): AnchorConfig | undefined {
602
+ if (isNil(anchorId)) return undefined
603
+
604
+ for (let i = 0; i < this.anchors.length; i++) {
605
+ const anchor = this.anchors[i]
606
+ if (anchor.id === anchorId) {
607
+ return anchor
608
+ }
609
+ }
610
+ }
611
+
612
+ @action addNodeMoveRules(fn: Model.NodeMoveRule) {
613
+ if (!this.moveRules.includes(fn)) {
614
+ this.moveRules.push(fn)
615
+ }
616
+ }
617
+
618
+ isAllowMoveByXORY(deltaX: number, deltaY: number, isIgnoreRule: boolean) {
619
+ let isAllowMoveX: boolean
620
+ let isAllowMoveY: boolean
621
+ if (isIgnoreRule) {
622
+ isAllowMoveX = true
623
+ isAllowMoveY = true
624
+ } else {
625
+ const r = this.isAllowMoveNode(deltaX, deltaY)
626
+ if (typeof r === 'boolean') {
627
+ isAllowMoveX = r
628
+ isAllowMoveY = r
629
+ } else {
630
+ isAllowMoveX = r.x
631
+ isAllowMoveY = r.y
632
+ }
633
+ }
634
+ return {
635
+ isAllowMoveX,
636
+ isAllowMoveY,
637
+ }
638
+ }
639
+
640
+ @action move(deltaX: number, deltaY: number, isIgnoreRule = false): boolean {
641
+ const { isAllowMoveX, isAllowMoveY } = this.isAllowMoveByXORY(
642
+ deltaX,
643
+ deltaY,
644
+ isIgnoreRule,
645
+ )
646
+ if (isAllowMoveX) {
647
+ this.x = this.x + deltaX
648
+ this.text && this.moveText(deltaX, 0)
649
+ }
650
+ if (isAllowMoveY) {
651
+ this.y = this.y + deltaY
652
+ this.text && this.moveText(0, deltaY)
653
+ }
654
+ return isAllowMoveX || isAllowMoveY
655
+ }
656
+
657
+ @action getMoveDistance(
658
+ deltaX: number,
659
+ deltaY: number,
660
+ isIgnoreRule = false,
661
+ ): [number, number] {
662
+ const { isAllowMoveX, isAllowMoveY } = this.isAllowMoveByXORY(
663
+ deltaX,
664
+ deltaY,
665
+ isIgnoreRule,
666
+ )
667
+ let moveX = 0
668
+ let moveY = 0
669
+
670
+ if (isAllowMoveX && deltaX) {
671
+ this.x = this.x + deltaX
672
+ this.text && this.moveText(deltaX, 0)
673
+ moveX = deltaX
674
+ }
675
+ if (isAllowMoveY && deltaY) {
676
+ this.y = this.y + deltaY
677
+ this.text && this.moveText(0, deltaY)
678
+ moveY = deltaY
679
+ }
680
+ return [moveX, moveY]
681
+ }
682
+
683
+ @action moveTo(x: number, y: number, isIgnoreRule = false): boolean {
684
+ const deltaX = x - this.x
685
+ const deltaY = y - this.y
686
+ if (!isIgnoreRule && !this.isAllowMoveNode(deltaX, deltaY)) {
687
+ return false
688
+ }
689
+ if (this.text) {
690
+ this.text && this.moveText(deltaX, deltaY)
691
+ }
692
+ this.x = x
693
+ this.y = y
694
+ return true
695
+ }
696
+
697
+ @action moveText(deltaX: number, deltaY: number): void {
698
+ const { x, y, value, draggable, editable } = this.text
699
+ this.text = {
700
+ value,
701
+ editable,
702
+ draggable,
703
+ x: x + deltaX,
704
+ y: y + deltaY,
705
+ }
706
+ }
707
+
708
+ @action updateText(value: string): void {
709
+ this.text = {
710
+ ...toJS(this.text),
711
+ value,
712
+ }
713
+ }
714
+
715
+ @action setSelected(flag = true): void {
716
+ this.isSelected = flag
717
+ }
718
+
719
+ @action setHovered(flag = true): void {
720
+ this.isHovered = flag
721
+ this.setIsShowAnchor(flag)
722
+ }
723
+
724
+ @action setIsShowAnchor(flag = true): void {
725
+ this.isShowAnchor = flag
726
+ }
727
+
728
+ @action setEnableRotate(flag = true): void {
729
+ this.enableRotate = flag
730
+ }
731
+
732
+ @action setEnableResize(flag = true): void {
733
+ this.enableResize = flag
734
+ }
735
+
736
+ @action setHitable(flag = true): void {
737
+ this.isHitable = flag
738
+ }
739
+
740
+ @action setHittable(flag = true): void {
741
+ this.isHittable = flag
742
+ }
743
+
744
+ @action setElementState(
745
+ state: number,
746
+ additionStateData?: Model.AdditionStateDataType,
747
+ ): void {
748
+ this.state = state
749
+ this.additionStateData = additionStateData
750
+ }
751
+
752
+ // TODO: 处理重复代码,setProperty 和 setProperties -> 公用代码提到 updateProperties 中?
753
+ @action setProperty(key: string, val: any): void {
754
+ const preProperties = toJS(this.properties)
755
+ const nextProperties = {
756
+ ...preProperties,
757
+ [key]: formatData(val),
758
+ }
759
+ this.properties = nextProperties
760
+ this.setAttributes()
761
+
762
+ // 触发更新节点 properties:change 的事件
763
+ this.graphModel.eventCenter.emit(EventType.NODE_PROPERTIES_CHANGE, {
764
+ id: this.id,
765
+ keys: [key],
766
+ preProperties,
767
+ properties: nextProperties,
768
+ })
769
+ }
770
+
771
+ @action setProperties(properties: Record<string, any>): void {
772
+ const preProperties = toJS(this.properties)
773
+ const nextProperties = {
774
+ ...preProperties,
775
+ ...formatData(properties),
776
+ }
777
+ this.properties = nextProperties
778
+ this.setAttributes()
779
+
780
+ const updateKeys: string[] = []
781
+ mapKeys(properties, (val, key) => {
782
+ // key 存在于上一个 properties 并且与传入的值不相等 或者 key 不存在于上一个 properties
783
+ if (
784
+ (has(preProperties, key) && preProperties[key] !== val) ||
785
+ !has(preProperties, key)
786
+ ) {
787
+ updateKeys.push(key)
788
+ }
789
+ })
790
+
791
+ // 触发更新节点 properties:change 的事件
792
+ this.graphModel.eventCenter.emit(EventType.NODE_PROPERTIES_CHANGE, {
793
+ id: this.id,
794
+ keys: updateKeys,
795
+ preProperties,
796
+ properties: nextProperties,
797
+ })
798
+ }
799
+
800
+ @action deleteProperty(key: string): void {
801
+ delete this.properties[key]
802
+ this.setAttributes()
803
+ }
804
+
805
+ @action setStyle(key: string, val: any): void {
806
+ this.style = {
807
+ ...this.style,
808
+ [key]: formatData(val),
809
+ }
810
+ }
811
+
812
+ @action setStyles(styles: Record<string, any>): void {
813
+ this.style = {
814
+ ...this.style,
815
+ ...formatData(styles),
816
+ }
817
+ }
818
+
819
+ @action updateStyles(styles: Record<string, any>): void {
820
+ this.style = {
821
+ ...formatData(styles),
822
+ }
823
+ }
824
+
825
+ @action setZIndex(zIndex = 1): void {
826
+ this.zIndex = zIndex
827
+ }
828
+
829
+ @action updateAttributes(attributes: any) {
830
+ assign(this, attributes)
831
+ }
832
+ }
833
+
834
+ export namespace BaseNodeModel {
835
+ export type PointTuple = [number, number]
836
+ export type AnchorsOffsetItem = PointTuple | Point
837
+ }
838
+
839
+ export default BaseNodeModel