@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,5 +1,5 @@
1
1
  import { action, computed, isObservable, observable, toJS } from 'mobx'
2
- import { assign, cloneDeep, has, isNil, mapKeys } from 'lodash-es'
2
+ import { assign, cloneDeep, has, isNil, mapKeys, isUndefined } from 'lodash-es'
3
3
  import { GraphModel, Model } from '..'
4
4
  import LogicFlow from '../../LogicFlow'
5
5
  import {
@@ -17,6 +17,7 @@ import {
17
17
  EventType,
18
18
  ModelType,
19
19
  OverlapMode,
20
+ TextMode,
20
21
  } from '../../constant'
21
22
  import { ResizeControl } from '../../view/Control'
22
23
  import AnchorConfig = Model.AnchorConfig
@@ -26,26 +27,30 @@ import NodeConfig = LogicFlow.NodeConfig
26
27
  import NodeData = LogicFlow.NodeData
27
28
  import Point = LogicFlow.Point
28
29
  import CommonTheme = LogicFlow.CommonTheme
30
+ import PropertiesType = LogicFlow.PropertiesType
29
31
 
30
32
  import ResizeInfo = ResizeControl.ResizeInfo
31
33
  import ResizeNodeData = ResizeControl.ResizeNodeData
32
34
  import PCTResizeParams = ResizeControl.PCTResizeParams
33
35
 
34
- export interface IBaseNodeModel extends Model.BaseModel {
36
+ export interface IBaseNodeModel<P extends PropertiesType>
37
+ extends Model.BaseModel<P> {
35
38
  /**
36
39
  * model基础类型,固定为node
37
40
  */
38
41
  readonly BaseType: ElementType.NODE
42
+ properties: P
39
43
 
40
44
  isDragging: boolean
41
45
  isShowAnchor: boolean
42
46
  getNodeStyle: () => CommonTheme
43
47
  getTextStyle: () => LogicFlow.TextNodeTheme
44
-
45
48
  setIsShowAnchor: (isShowAnchor: boolean) => void
46
49
  }
47
50
 
48
- export class BaseNodeModel implements IBaseNodeModel {
51
+ export class BaseNodeModel<P extends PropertiesType = PropertiesType>
52
+ implements IBaseNodeModel<P>
53
+ {
49
54
  readonly BaseType = ElementType.NODE
50
55
  static BaseType: ElementType = ElementType.NODE
51
56
 
@@ -54,6 +59,7 @@ export class BaseNodeModel implements IBaseNodeModel {
54
59
  @observable readonly type = ''
55
60
  @observable x = 0
56
61
  @observable y = 0
62
+ @observable textMode = TextMode.TEXT
57
63
  @observable text: TextConfig = {
58
64
  value: '',
59
65
  x: 0,
@@ -61,7 +67,7 @@ export class BaseNodeModel implements IBaseNodeModel {
61
67
  draggable: false,
62
68
  editable: true,
63
69
  }
64
- @observable properties: Record<string, unknown> = {}
70
+ @observable properties: P
65
71
  // 形状属性
66
72
  @observable private _width = 100
67
73
  public get width() {
@@ -100,8 +106,9 @@ export class BaseNodeModel implements IBaseNodeModel {
100
106
  @observable isHittable = true // 细粒度控制节点是否对用户操作进行反应
101
107
  @observable draggable = true
102
108
  @observable visible = true
103
- @observable enableRotate = true
104
- @observable enableResize = true
109
+
110
+ @observable rotatable = true // 节点可旋转
111
+ @observable resizable = true // 节点可缩放
105
112
 
106
113
  // 其它属性
107
114
  graphModel: GraphModel
@@ -137,9 +144,9 @@ export class BaseNodeModel implements IBaseNodeModel {
137
144
  hasSetSourceRules = false; // 用来限制rules的重复值
138
145
  [propName: string]: any // 支持用户自定义属性
139
146
 
140
- constructor(data: NodeConfig, graphModel: GraphModel) {
147
+ constructor(data: NodeConfig<P>, graphModel: GraphModel) {
141
148
  this.graphModel = graphModel
142
- this.properties = data.properties || {}
149
+ this.properties = data.properties ?? ({} as P)
143
150
 
144
151
  this.initNodeData(data)
145
152
  this.setAttributes()
@@ -168,9 +175,9 @@ export class BaseNodeModel implements IBaseNodeModel {
168
175
  /**
169
176
  * @overridable 可以重写
170
177
  * 初始化节点数据
171
- * initNodeData和setAttributes的区别在于
172
- * initNodeData只在节点初始化的时候调用,用于初始化节点的所有属性。
173
- * setAttributes除了初始化调用外,还会在properties发生变化了调用。
178
+ * initNodeData setAttributes 的区别在于
179
+ * initNodeData 只在节点初始化的时候调用,用于初始化节点的所有属性。
180
+ * setAttributes 除了初始化调用外,还会在 properties 发生变化了调用。
174
181
  */
175
182
  public initNodeData(data: NodeConfig) {
176
183
  if (!data.properties) {
@@ -186,7 +193,10 @@ export class BaseNodeModel implements IBaseNodeModel {
186
193
  }
187
194
 
188
195
  this.formatText(data)
189
- assign(this, pickNodeConfig(data)) // TODO: 确认 constructor 中赋值 properties 是否必要
196
+ // 在下面又将 NodeConfig 中的数据赋值给了 this,应该会触发 setAttributes,确认是否符合预期
197
+ // TODO: 确认 constructor 中赋值 properties 是否必要,此处将 NodeConfig 中所有属性赋值给 this,包括 rotate、rotatable,resizable 等
198
+ assign(this, pickNodeConfig(data))
199
+
190
200
  const { overlapMode } = this.graphModel
191
201
  if (overlapMode === OverlapMode.INCREASE) {
192
202
  this.zIndex = data.zIndex || getZIndex()
@@ -215,31 +225,46 @@ export class BaseNodeModel implements IBaseNodeModel {
215
225
  return null
216
226
  }
217
227
 
228
+ /**
229
+ * 设置当前元素的文本模式
230
+ * @param mode
231
+ */
232
+ @action setTextMode(mode: TextMode) {
233
+ this.textMode = mode
234
+ }
235
+
218
236
  /**
219
237
  * 始化文本属性
220
238
  */
221
239
  private formatText(data: NodeConfig): void {
222
- if (!data.text) {
223
- data.text = {
224
- value: '',
225
- x: data.x,
226
- y: data.y,
227
- draggable: false,
228
- editable: true,
229
- }
230
- } else {
231
- if (typeof data.text === 'string') {
232
- data.text = {
233
- value: data.text,
234
- x: data.x,
235
- y: data.y,
236
- draggable: false,
237
- editable: true,
238
- }
240
+ const { x, y, text } = data
241
+ let textConfig: TextConfig = {
242
+ value: '',
243
+ x,
244
+ y,
245
+ draggable: false,
246
+ editable: true,
247
+ }
248
+ if (text) {
249
+ if (typeof text === 'string') {
250
+ textConfig.value = text
239
251
  } else {
240
- data.text.editable = data.text.editable ?? true
252
+ textConfig = {
253
+ ...textConfig,
254
+ x: text.x ?? x,
255
+ y: text.y ?? y,
256
+ value: text.value ?? '',
257
+ }
258
+ if (!isUndefined(text.draggable)) {
259
+ textConfig.draggable = text.draggable
260
+ }
261
+ if (!isUndefined(text.editable)) {
262
+ textConfig.draggable = text.draggable
263
+ }
241
264
  }
242
265
  }
266
+
267
+ data.text = textConfig
243
268
  }
244
269
 
245
270
  /**
@@ -257,7 +282,6 @@ export class BaseNodeModel implements IBaseNodeModel {
257
282
  width,
258
283
  height,
259
284
  })
260
-
261
285
  return this.getData()
262
286
  }
263
287
 
@@ -343,7 +367,11 @@ export class BaseNodeModel implements IBaseNodeModel {
343
367
  getTextStyle() {
344
368
  // 透传 nodeText
345
369
  const { nodeText } = this.graphModel.theme
346
- return cloneDeep(nodeText)
370
+ const { textStyle = {} } = this.properties
371
+ return {
372
+ ...cloneDeep(nodeText),
373
+ ...cloneDeep(textStyle),
374
+ }
347
375
  }
348
376
 
349
377
  /**
@@ -576,10 +604,10 @@ export class BaseNodeModel implements IBaseNodeModel {
576
604
  */
577
605
  public getBounds(): Model.BoxBoundsPoint {
578
606
  return {
579
- x1: this.x - this.width / 2,
580
- y1: this.y - this.height / 2,
581
- x2: this.x + this.width / 2,
582
- y2: this.y + this.height / 2,
607
+ minX: this.x - this.width / 2,
608
+ minY: this.y - this.height / 2,
609
+ maxX: this.x + this.width / 2,
610
+ maxY: this.y + this.height / 2,
583
611
  }
584
612
  }
585
613
 
@@ -683,12 +711,9 @@ export class BaseNodeModel implements IBaseNodeModel {
683
711
  @action moveTo(x: number, y: number, isIgnoreRule = false): boolean {
684
712
  const deltaX = x - this.x
685
713
  const deltaY = y - this.y
686
- if (!isIgnoreRule && !this.isAllowMoveNode(deltaX, deltaY)) {
687
- return false
688
- }
689
- if (this.text) {
690
- this.text && this.moveText(deltaX, deltaY)
691
- }
714
+ if (!isIgnoreRule && !this.isAllowMoveNode(deltaX, deltaY)) return false
715
+
716
+ this.text && this.moveText(deltaX, deltaY)
692
717
  this.x = x
693
718
  this.y = y
694
719
  return true
@@ -725,12 +750,12 @@ export class BaseNodeModel implements IBaseNodeModel {
725
750
  this.isShowAnchor = flag
726
751
  }
727
752
 
728
- @action setEnableRotate(flag = true): void {
729
- this.enableRotate = flag
753
+ @action setRotatable(flag = true): void {
754
+ this.rotatable = flag
730
755
  }
731
756
 
732
- @action setEnableResize(flag = true): void {
733
- this.enableResize = flag
757
+ @action setResizable(flag = true): void {
758
+ this.resizable = flag
734
759
  }
735
760
 
736
761
  @action setHitable(flag = true): void {
@@ -18,9 +18,11 @@ export type ICircleNodeProperties = {
18
18
  [key: string]: any
19
19
  }
20
20
 
21
- export class CircleNodeModel extends BaseNodeModel {
21
+ export class CircleNodeModel<
22
+ P extends ICircleNodeProperties = ICircleNodeProperties,
23
+ > extends BaseNodeModel<P> {
22
24
  modelType = ModelType.CIRCLE_NODE
23
- @observable properties: ICircleNodeProperties = {}
25
+ // @observable properties: ICircleNodeProperties = {}
24
26
  @observable r = 50
25
27
 
26
28
  @computed get width(): number {
@@ -31,9 +33,9 @@ export class CircleNodeModel extends BaseNodeModel {
31
33
  return this.r * 2
32
34
  }
33
35
 
34
- constructor(data: NodeConfig, graphModel: GraphModel) {
36
+ constructor(data: NodeConfig<P>, graphModel: GraphModel) {
35
37
  super(data, graphModel)
36
- this.properties = data.properties || {}
38
+ // this.properties = data.properties || {}
37
39
 
38
40
  this.setAttributes()
39
41
  }
@@ -54,11 +56,11 @@ export class CircleNodeModel extends BaseNodeModel {
54
56
  theme: { circle },
55
57
  },
56
58
  } = this
57
- const { style: customStyle } = this.properties
59
+ const { style: customStyle = {} } = this.properties
58
60
  return {
59
61
  ...style,
60
- ...(customStyle ?? {}),
61
62
  ...cloneDeep(circle),
63
+ ...cloneDeep(customStyle),
62
64
  }
63
65
  }
64
66
 
@@ -81,7 +83,6 @@ export class CircleNodeModel extends BaseNodeModel {
81
83
  this.setProperties({
82
84
  r: width,
83
85
  })
84
-
85
86
  return this.getData()
86
87
  }
87
88
  }
@@ -18,18 +18,20 @@ export type IDiamondNodeProperties = {
18
18
  style?: LogicFlow.CommonTheme
19
19
  textStyle?: LogicFlow.CommonTheme
20
20
 
21
- [key: string]: any
21
+ [key: string]: unknown
22
22
  }
23
23
 
24
- export class DiamondNodeModel extends BaseNodeModel {
24
+ export class DiamondNodeModel<
25
+ P extends IDiamondNodeProperties = IDiamondNodeProperties,
26
+ > extends BaseNodeModel<P> {
25
27
  modelType = ModelType.DIAMOND_NODE
26
28
  @observable rx = 30
27
29
  @observable ry = 50
28
- @observable properties: IDiamondNodeProperties = {}
30
+ // @observable properties: IDiamondNodeProperties = {}
29
31
 
30
- constructor(data: NodeConfig, graphModel: GraphModel) {
32
+ constructor(data: NodeConfig<P>, graphModel: GraphModel) {
31
33
  super(data, graphModel)
32
- this.properties = data.properties || {}
34
+ // this.properties = data.properties || {}
33
35
 
34
36
  this.setAttributes()
35
37
  }
@@ -53,9 +55,11 @@ export class DiamondNodeModel extends BaseNodeModel {
53
55
  theme: { diamond },
54
56
  },
55
57
  } = this
58
+ const { style: customStyle = {} } = this.properties
56
59
  return {
57
60
  ...style,
58
61
  ...cloneDeep(diamond),
62
+ ...cloneDeep(customStyle),
59
63
  }
60
64
  }
61
65
 
@@ -120,7 +124,6 @@ export class DiamondNodeModel extends BaseNodeModel {
120
124
  rx: width,
121
125
  ry: height,
122
126
  })
123
-
124
127
  return this.getData()
125
128
  }
126
129
  }
@@ -16,18 +16,20 @@ export type IEllipseNodeProperties = {
16
16
  style?: LogicFlow.CommonTheme
17
17
  textStyle?: LogicFlow.CommonTheme
18
18
 
19
- [key: string]: any
19
+ [key: string]: unknown
20
20
  }
21
21
 
22
- export class EllipseNodeModel extends BaseNodeModel {
22
+ export class EllipseNodeModel<
23
+ P extends IEllipseNodeProperties = IEllipseNodeProperties,
24
+ > extends BaseNodeModel<P> {
23
25
  modelType = ModelType.ELLIPSE_NODE
24
26
  @observable rx = 30
25
27
  @observable ry = 45
26
- @observable properties: IEllipseNodeProperties = {}
28
+ // @observable properties: IEllipseNodeProperties = {}
27
29
 
28
- constructor(data: NodeConfig, graphModel: GraphModel) {
30
+ constructor(data: NodeConfig<P>, graphModel: GraphModel) {
29
31
  super(data, graphModel)
30
- this.properties = data.properties || {}
32
+ // this.properties = data.properties || {}
31
33
 
32
34
  this.setAttributes()
33
35
  }
@@ -51,9 +53,11 @@ export class EllipseNodeModel extends BaseNodeModel {
51
53
  theme: { ellipse },
52
54
  },
53
55
  } = this
56
+ const { style: customStyle = {} } = this.properties
54
57
  return {
55
58
  ...style,
56
59
  ...cloneDeep(ellipse),
60
+ ...cloneDeep(customStyle),
57
61
  }
58
62
  }
59
63
 
@@ -86,7 +90,6 @@ export class EllipseNodeModel extends BaseNodeModel {
86
90
  rx: width,
87
91
  ry: height,
88
92
  })
89
-
90
93
  return this.getData()
91
94
  }
92
95
  }
@@ -3,26 +3,27 @@ import { Model } from '../BaseModel'
3
3
  import { ModelType } from '../../constant'
4
4
 
5
5
  import AnchorConfig = Model.AnchorConfig
6
- import { observable } from 'mobx'
7
6
  import LogicFlow from '../../LogicFlow'
8
7
  import GraphModel from '../GraphModel'
9
8
 
10
- export type IHtmlNodeModel = {
9
+ export type IHtmlNodeProperties = {
11
10
  width?: number
12
11
  height?: number
13
12
  style?: LogicFlow.CommonTheme
14
13
  textStyle?: LogicFlow.CommonTheme
15
14
 
16
- [key: string]: any
15
+ [key: string]: unknown
17
16
  }
18
17
 
19
- export class HtmlNodeModel extends BaseNodeModel {
18
+ export class HtmlNodeModel<
19
+ P extends IHtmlNodeProperties = IHtmlNodeProperties,
20
+ > extends BaseNodeModel<P> {
20
21
  modelType = ModelType.HTML_NODE
21
- @observable properties: IHtmlNodeModel = {}
22
+ // @observable properties: IHtmlNodeProperties = {}
22
23
 
23
- constructor(data: LogicFlow.NodeConfig, graphModel: GraphModel) {
24
+ constructor(data: LogicFlow.NodeConfig<P>, graphModel: GraphModel) {
24
25
  super(data, graphModel)
25
- this.properties = data.properties || {}
26
+ // this.properties = data.properties || {}
26
27
 
27
28
  this.setAttributes()
28
29
  }
@@ -19,10 +19,12 @@ export type IPolygonNodeProperties = {
19
19
  style?: LogicFlow.CommonTheme
20
20
  textStyle?: LogicFlow.CommonTheme
21
21
 
22
- [key: string]: any
22
+ [key: string]: unknown
23
23
  }
24
24
 
25
- export class PolygonNodeModel extends BaseNodeModel {
25
+ export class PolygonNodeModel<
26
+ P extends IPolygonNodeProperties = IPolygonNodeProperties,
27
+ > extends BaseNodeModel<P> {
26
28
  modelType = ModelType.POLYGON_NODE
27
29
  @observable points: PointTuple[] = [
28
30
  [50, 0],
@@ -36,11 +38,11 @@ export class PolygonNodeModel extends BaseNodeModel {
36
38
  // [10, 78],
37
39
  // [160, 198], // 五角星
38
40
  ]
39
- @observable properties: IPolygonNodeProperties = {}
41
+ // @observable properties: IPolygonNodeProperties = {}
40
42
 
41
- constructor(data: NodeConfig, graphModel: GraphModel) {
43
+ constructor(data: NodeConfig<P>, graphModel: GraphModel) {
42
44
  super(data, graphModel)
43
- this.properties = data.properties || {}
45
+ // this.properties = data.properties || {}
44
46
 
45
47
  this.setAttributes()
46
48
  }
@@ -66,11 +68,11 @@ export class PolygonNodeModel extends BaseNodeModel {
66
68
  theme: { polygon },
67
69
  },
68
70
  } = this
69
- const { style: customStyle } = this.properties
71
+ const { style: customStyle = {} } = this.properties
70
72
  return {
71
73
  ...style,
72
74
  ...cloneDeep(polygon),
73
- ...(cloneDeep(customStyle) || {}),
75
+ ...cloneDeep(customStyle),
74
76
  }
75
77
  }
76
78
 
@@ -5,33 +5,40 @@ import GraphModel from '../GraphModel'
5
5
  import LogicFlow from '../../LogicFlow'
6
6
  import { ModelType } from '../../constant'
7
7
 
8
- export type IRectNodeModel = {
8
+ export type IRectNodeProperties = {
9
9
  width?: number
10
10
  height?: number
11
+ radius?: number
11
12
  style?: LogicFlow.CommonTheme
12
13
  textStyle?: LogicFlow.CommonTheme
13
14
 
14
- [key: string]: any
15
+ [key: string]: unknown
15
16
  }
16
17
 
17
- export class RectNodeModel extends BaseNodeModel {
18
+ export class RectNodeModel<
19
+ P extends IRectNodeProperties = IRectNodeProperties,
20
+ > extends BaseNodeModel<P> {
18
21
  modelType = ModelType.RECT_NODE
19
22
  @observable radius = 0
20
- @observable properties: IRectNodeModel = {}
23
+ // @observable properties: P
21
24
 
22
- constructor(data: LogicFlow.NodeConfig, graphModel: GraphModel) {
25
+ constructor(data: LogicFlow.NodeConfig<P>, graphModel: GraphModel) {
23
26
  super(data, graphModel)
24
- this.properties = data.properties || {}
25
27
 
28
+ // TODO:类字段初始化会覆盖 super、setAttributes 中设置的属性
29
+ // this.properties = data.properties || {}
30
+ // TODO: bug here, 上面更新 properties 会触发 setAttributes,下面再主动调用,会导致触发两次
26
31
  this.setAttributes()
27
32
  }
28
33
 
29
34
  setAttributes() {
30
35
  super.setAttributes()
31
36
 
32
- const { width, height } = this.properties
37
+ const { width, height, radius } = this.properties
33
38
  if (width) this.width = width
34
39
  if (height) this.height = height
40
+ // 矩形特有
41
+ if (radius) this.radius = radius
35
42
  }
36
43
 
37
44
  getDefaultAnchor() {
@@ -43,13 +50,14 @@ export class RectNodeModel extends BaseNodeModel {
43
50
  { x: x - width / 2, y, id: `${this.id}_3` },
44
51
  ]
45
52
  }
46
-
47
53
  getNodeStyle() {
48
54
  const style = super.getNodeStyle()
49
55
  const { rect } = this.graphModel.theme
56
+ const { style: customStyle = {} } = this.properties
50
57
  return {
51
58
  ...style,
52
59
  ...cloneDeep(rect),
60
+ ...cloneDeep(customStyle),
53
61
  }
54
62
  }
55
63
  }
@@ -3,18 +3,31 @@ import { computed } from 'mobx'
3
3
  import BaseNodeModel from './BaseNodeModel'
4
4
  import { ModelType } from '../../constant'
5
5
  import { getSvgTextWidthHeight } from '../../util'
6
+ import LogicFlow from '../../LogicFlow'
6
7
 
7
- export class TextNodeModel extends BaseNodeModel {
8
+ export type ITextNodeProperties = {
9
+ style?: LogicFlow.CommonTheme
10
+ textStyle?: LogicFlow.CommonTheme
11
+
12
+ [key: string]: unknown
13
+ }
14
+
15
+ export class TextNodeModel<
16
+ P extends ITextNodeProperties = ITextNodeProperties,
17
+ > extends BaseNodeModel<P> {
8
18
  modelType = ModelType.TEXT_NODE
9
19
 
10
20
  getTextStyle() {
11
21
  const style = super.getTextStyle()
12
22
  const { text } = this.graphModel.theme
23
+ const { textStyle } = this.properties
13
24
  return {
14
25
  ...style,
15
26
  ...cloneDeep(text),
27
+ ...cloneDeep(textStyle),
16
28
  }
17
29
  }
30
+
18
31
  @computed get width(): number {
19
32
  const rows = String(this.text.value).split(/[\r\n]/g)
20
33
  const { fontSize } = this.getTextStyle()
package/src/options.ts CHANGED
@@ -1,15 +1,17 @@
1
1
  import { assign } from 'lodash-es'
2
2
  import { createElement as h } from 'preact/compat'
3
3
  import LogicFlow from './LogicFlow'
4
- import { GraphModel } from './model'
5
4
  import { KeyboardDef } from './keyboard'
6
- import { DEFAULT_GRID_SIZE, OverlapMode } from './constant'
5
+ import { OverlapMode, TextMode } from './constant'
6
+ import { Grid } from './view/overlay'
7
+
8
+ import GridOptions = Grid.GridOptions
7
9
 
8
10
  export namespace Options {
9
11
  import NodeData = LogicFlow.NodeData
10
12
  import EdgeData = LogicFlow.EdgeData
11
- import ExtensionConstructor = LogicFlow.ExtensionConstructor
12
13
  import GraphData = LogicFlow.GraphData
14
+ import ExtensionType = LogicFlow.ExtensionType
13
15
  export type EdgeType = 'line' | 'polyline' | 'bezier' | string
14
16
  export type BackgroundConfig = {
15
17
  // 背景图片地址
@@ -25,19 +27,6 @@ export namespace Options {
25
27
  // TODO: 根据具体情况添加各种自定义样式
26
28
  [key: string]: any
27
29
  }
28
- export type GridOptions = {
29
- // 网格格子间距
30
- size?: number
31
- // 网格是否可见
32
- visible?: boolean
33
- graphModel?: GraphModel
34
- // 网格类型
35
- type?: 'dot' | 'mesh'
36
- config?: {
37
- color: string
38
- thickness?: number
39
- }
40
- }
41
30
 
42
31
  export type AnimationConfig = {
43
32
  node: boolean
@@ -68,6 +57,9 @@ export namespace Options {
68
57
  width?: number
69
58
  height?: number
70
59
  background?: false | BackgroundConfig
60
+ /**
61
+ * Grid 网格配置
62
+ */
71
63
  grid?: number | boolean | GridOptions
72
64
 
73
65
  partial?: boolean
@@ -76,10 +68,15 @@ export namespace Options {
76
68
  edgeType?: EdgeType
77
69
  adjustEdge?: boolean
78
70
 
71
+ // 元素文本类型:text or label
72
+ textMode?: TextMode
73
+ edgeTextMode?: TextMode
74
+ nodeTextMode?: TextMode
75
+
79
76
  allowRotate?: boolean // 允许节点旋转
80
77
  allowResize?: boolean // 是否允许缩放
81
78
 
82
- isSilentMode?: boolean
79
+ isSilentMode?: boolean // 是否为静默模式:可以简单理解为“只读”模式,这种模式下,画布中的节点和边不可移动,不可进行文案修改,没有锚点。
83
80
  stopScrollGraph?: boolean
84
81
  stopZoomGraph?: boolean
85
82
  stopMoveGraph?:
@@ -96,7 +93,7 @@ export namespace Options {
96
93
  guards?: GuardsConfig
97
94
  overlapMode?: OverlapMode
98
95
 
99
- plugins?: ExtensionConstructor[]
96
+ plugins?: ExtensionType[]
100
97
  pluginsOptions?: Record<string, any>
101
98
  disabledPlugins?: string[]
102
99
  disabledTools?: string[]
@@ -117,47 +114,15 @@ export namespace Options {
117
114
 
118
115
  export namespace Options {
119
116
  export function get(options: Partial<Manual>) {
120
- const { grid, ...others } = options
117
+ const { ...others } = options
121
118
  const container = options.container
122
- if (container != null) {
123
- if (options.width == null) {
124
- others.width = container.clientWidth
125
- }
126
- if (options.height == null) {
127
- others.height = container.clientHeight
128
- }
129
- } else {
119
+ if (!container) {
130
120
  throw new Error(
131
121
  'Ensure the container of LogicFlow is specified and valid.',
132
122
  )
133
123
  }
134
124
 
135
- const result = assign({}, defaults, others) as Options.Definition
136
-
137
- const defaultGrid: GridOptions = {
138
- size: DEFAULT_GRID_SIZE,
139
- type: 'dot',
140
- visible: true,
141
- config: {
142
- color: '#ababab',
143
- thickness: 1,
144
- },
145
- }
146
- if (typeof grid === 'number') {
147
- result.grid = {
148
- ...defaultGrid,
149
- size: grid,
150
- }
151
- } else if (typeof grid === 'boolean') {
152
- result.grid = {
153
- ...defaultGrid,
154
- visible: grid,
155
- }
156
- } else {
157
- result.grid = { ...defaultGrid, ...grid }
158
- }
159
-
160
- return result
125
+ return assign({}, defaults, others) as Options.Definition
161
126
  }
162
127
  }
163
128