@logicflow/core 2.0.0-beta.1 → 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 (469) hide show
  1. package/.turbo/turbo-build$colon$dev.log +2 -2
  2. package/.turbo/turbo-build.log +9 -9
  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 +9 -3
  6. package/es/LogicFlow.d.ts +88 -40
  7. package/es/LogicFlow.js +38 -33
  8. package/es/LogicFlow.js.map +1 -1
  9. package/es/algorithm/edge.js.map +1 -1
  10. package/es/algorithm/index.d.ts +2 -0
  11. package/es/algorithm/index.js +2 -0
  12. package/es/algorithm/index.js.map +1 -1
  13. package/es/algorithm/outline.d.ts +1 -1
  14. package/es/common/drag.d.ts +51 -0
  15. package/es/common/drag.js +145 -0
  16. package/es/common/drag.js.map +1 -0
  17. package/es/common/history.d.ts +28 -0
  18. package/es/common/history.js +92 -0
  19. package/es/common/history.js.map +1 -0
  20. package/es/common/index.d.ts +5 -0
  21. package/es/common/index.js +6 -0
  22. package/es/common/index.js.map +1 -0
  23. package/es/common/keyboard.d.ts +34 -0
  24. package/es/common/keyboard.js +80 -0
  25. package/es/common/keyboard.js.map +1 -0
  26. package/es/common/matrix.d.ts +30 -0
  27. package/es/common/matrix.js +155 -0
  28. package/es/common/matrix.js.map +1 -0
  29. package/es/common/vector.d.ts +23 -0
  30. package/es/common/vector.js +97 -0
  31. package/es/common/vector.js.map +1 -0
  32. package/es/constant/index.d.ts +39 -2
  33. package/es/constant/index.js +41 -1
  34. package/es/constant/index.js.map +1 -1
  35. package/es/event/eventArgs.d.ts +103 -25
  36. package/es/event/eventEmitter.d.ts +2 -2
  37. package/es/event/eventEmitter.js +0 -1
  38. package/es/event/eventEmitter.js.map +1 -1
  39. package/es/index.d.ts +6 -1
  40. package/es/index.js +6 -1
  41. package/es/index.js.map +1 -1
  42. package/es/keyboard/index.d.ts +1 -0
  43. package/es/keyboard/index.js +1 -0
  44. package/es/keyboard/index.js.map +1 -1
  45. package/es/keyboard/shortcut.d.ts +8 -0
  46. package/es/keyboard/shortcut.js +70 -8
  47. package/es/keyboard/shortcut.js.map +1 -1
  48. package/es/model/BaseModel.d.ts +16 -7
  49. package/es/model/EditConfigModel.d.ts +97 -36
  50. package/es/model/EditConfigModel.js +169 -82
  51. package/es/model/EditConfigModel.js.map +1 -1
  52. package/es/model/GraphModel.d.ts +36 -14
  53. package/es/model/GraphModel.js +60 -10
  54. package/es/model/GraphModel.js.map +1 -1
  55. package/es/model/SnaplineModel.d.ts +2 -0
  56. package/es/model/TransformModel.js +1 -1
  57. package/es/model/TransformModel.js.map +1 -1
  58. package/es/model/edge/BaseEdgeModel.d.ts +21 -17
  59. package/es/model/edge/BaseEdgeModel.js +64 -42
  60. package/es/model/edge/BaseEdgeModel.js.map +1 -1
  61. package/es/model/edge/BezierEdgeModel.d.ts +5 -3
  62. package/es/model/edge/BezierEdgeModel.js +7 -3
  63. package/es/model/edge/BezierEdgeModel.js.map +1 -1
  64. package/es/model/edge/LineEdgeModel.d.ts +2 -0
  65. package/es/model/edge/LineEdgeModel.js +2 -1
  66. package/es/model/edge/LineEdgeModel.js.map +1 -1
  67. package/es/model/edge/PolylineEdgeModel.d.ts +5 -3
  68. package/es/model/edge/PolylineEdgeModel.js +22 -15
  69. package/es/model/edge/PolylineEdgeModel.js.map +1 -1
  70. package/es/model/node/BaseNodeModel.d.ts +42 -14
  71. package/es/model/node/BaseNodeModel.js +62 -48
  72. package/es/model/node/BaseNodeModel.js.map +1 -1
  73. package/es/model/node/CircleNodeModel.d.ts +4 -3
  74. package/es/model/node/CircleNodeModel.js +4 -7
  75. package/es/model/node/CircleNodeModel.js.map +1 -1
  76. package/es/model/node/DiamondNodeModel.d.ts +5 -4
  77. package/es/model/node/DiamondNodeModel.js +4 -6
  78. package/es/model/node/DiamondNodeModel.js.map +1 -1
  79. package/es/model/node/EllipseNodeModel.d.ts +5 -4
  80. package/es/model/node/EllipseNodeModel.js +4 -6
  81. package/es/model/node/EllipseNodeModel.js.map +1 -1
  82. package/es/model/node/HtmlNodeModel.d.ts +4 -5
  83. package/es/model/node/HtmlNodeModel.js +2 -12
  84. package/es/model/node/HtmlNodeModel.js.map +1 -1
  85. package/es/model/node/PolygonNodeModel.d.ts +5 -4
  86. package/es/model/node/PolygonNodeModel.js +4 -7
  87. package/es/model/node/PolygonNodeModel.js.map +1 -1
  88. package/es/model/node/RectNodeModel.d.ts +7 -5
  89. package/es/model/node/RectNodeModel.js +10 -7
  90. package/es/model/node/RectNodeModel.js.map +1 -1
  91. package/es/model/node/TextNodeModel.d.ts +17 -9
  92. package/es/model/node/TextNodeModel.js +2 -1
  93. package/es/model/node/TextNodeModel.js.map +1 -1
  94. package/es/options.d.ts +6 -3
  95. package/es/options.js +2 -11
  96. package/es/options.js.map +1 -1
  97. package/es/tool/MultipleSelectTool.d.ts +1 -1
  98. package/es/tool/MultipleSelectTool.js +5 -5
  99. package/es/tool/MultipleSelectTool.js.map +1 -1
  100. package/es/tool/TextEditTool.d.ts +3 -3
  101. package/es/tool/TextEditTool.js +2 -2
  102. package/es/tool/TextEditTool.js.map +1 -1
  103. package/es/tool/index.d.ts +24 -2
  104. package/es/tool/index.js +82 -2
  105. package/es/tool/index.js.map +1 -1
  106. package/es/util/drag.d.ts +5 -5
  107. package/es/util/drag.js +3 -1
  108. package/es/util/drag.js.map +1 -1
  109. package/es/util/edge.d.ts +9 -2
  110. package/es/util/edge.js +23 -12
  111. package/es/util/edge.js.map +1 -1
  112. package/es/util/index.d.ts +1 -0
  113. package/es/util/index.js +1 -0
  114. package/es/util/index.js.map +1 -1
  115. package/es/util/node.d.ts +8 -7
  116. package/es/util/node.js +26 -7
  117. package/es/util/node.js.map +1 -1
  118. package/es/util/resize.d.ts +32 -0
  119. package/es/util/resize.js +197 -0
  120. package/es/util/resize.js.map +1 -0
  121. package/es/view/Anchor.d.ts +6 -7
  122. package/es/view/Anchor.js +6 -3
  123. package/es/view/Anchor.js.map +1 -1
  124. package/es/view/Control.d.ts +1 -1
  125. package/es/view/Control.js +88 -39
  126. package/es/view/Control.js.map +1 -1
  127. package/es/view/Graph.d.ts +5 -1
  128. package/es/view/Graph.js +43 -3
  129. package/es/view/Graph.js.map +1 -1
  130. package/es/view/Rotate.js +2 -1
  131. package/es/view/Rotate.js.map +1 -1
  132. package/es/view/behavior/index.d.ts +2 -0
  133. package/es/view/behavior/index.js +3 -0
  134. package/es/view/behavior/index.js.map +1 -0
  135. package/es/view/behavior/snapline.d.ts +3 -0
  136. package/es/{tool → view/behavior}/snapline.js +0 -1
  137. package/es/view/behavior/snapline.js.map +1 -0
  138. package/es/view/edge/AdjustPoint.js +12 -23
  139. package/es/view/edge/AdjustPoint.js.map +1 -1
  140. package/es/view/edge/BaseEdge.d.ts +2 -2
  141. package/es/view/edge/BaseEdge.js +30 -22
  142. package/es/view/edge/BaseEdge.js.map +1 -1
  143. package/es/view/node/BaseNode.d.ts +4 -4
  144. package/es/view/node/BaseNode.js +33 -24
  145. package/es/view/node/BaseNode.js.map +1 -1
  146. package/es/view/node/CircleNode.d.ts +1 -1
  147. package/es/view/node/CircleNode.js.map +1 -1
  148. package/es/view/node/DiamondNode.d.ts +1 -1
  149. package/es/view/node/DiamondNode.js.map +1 -1
  150. package/es/view/node/EllipseNode.d.ts +1 -1
  151. package/es/view/node/EllipseNode.js.map +1 -1
  152. package/es/view/node/HtmlNode.d.ts +1 -1
  153. package/es/view/node/HtmlNode.js +2 -2
  154. package/es/view/node/HtmlNode.js.map +1 -1
  155. package/es/view/node/PolygonNode.d.ts +1 -1
  156. package/es/view/node/PolygonNode.js.map +1 -1
  157. package/es/view/node/RectNode.d.ts +1 -1
  158. package/es/view/node/RectNode.js.map +1 -1
  159. package/es/view/node/TextNode.d.ts +1 -1
  160. package/es/view/node/TextNode.js +1 -1
  161. package/es/view/node/TextNode.js.map +1 -1
  162. package/es/view/overlay/CanvasOverlay.js +5 -4
  163. package/es/view/overlay/CanvasOverlay.js.map +1 -1
  164. package/es/view/overlay/ToolOverlay.d.ts +1 -1
  165. package/es/view/overlay/ToolOverlay.js +1 -1
  166. package/es/view/overlay/ToolOverlay.js.map +1 -1
  167. package/es/view/shape/Circle.d.ts +9 -1
  168. package/es/view/shape/Circle.js +5 -5
  169. package/es/view/shape/Circle.js.map +1 -1
  170. package/es/view/shape/Ellipse.d.ts +10 -1
  171. package/es/view/shape/Ellipse.js +5 -5
  172. package/es/view/shape/Ellipse.js.map +1 -1
  173. package/es/view/shape/Line.d.ts +14 -1
  174. package/es/view/shape/Line.js +5 -7
  175. package/es/view/shape/Line.js.map +1 -1
  176. package/es/view/shape/Path.d.ts +3 -2
  177. package/es/view/shape/Path.js +3 -3
  178. package/es/view/shape/Path.js.map +1 -1
  179. package/es/view/shape/Polygon.d.ts +5 -3
  180. package/es/view/shape/Polygon.js +6 -6
  181. package/es/view/shape/Polygon.js.map +1 -1
  182. package/es/view/shape/Polyline.d.ts +7 -1
  183. package/es/view/shape/Polyline.js +8 -6
  184. package/es/view/shape/Polyline.js.map +1 -1
  185. package/es/view/shape/Rect.d.ts +11 -13
  186. package/es/view/shape/Rect.js +6 -9
  187. package/es/view/shape/Rect.js.map +1 -1
  188. package/es/view/shape/Text.d.ts +19 -1
  189. package/es/view/shape/Text.js +28 -21
  190. package/es/view/shape/Text.js.map +1 -1
  191. package/es/view/text/BaseText.d.ts +12 -15
  192. package/es/view/text/BaseText.js +43 -29
  193. package/es/view/text/BaseText.js.map +1 -1
  194. package/es/view/text/LineText.d.ts +19 -7
  195. package/es/view/text/LineText.js +62 -54
  196. package/es/view/text/LineText.js.map +1 -1
  197. package/lib/LogicFlow.d.ts +88 -40
  198. package/lib/LogicFlow.js +40 -35
  199. package/lib/LogicFlow.js.map +1 -1
  200. package/lib/algorithm/edge.js.map +1 -1
  201. package/lib/algorithm/index.d.ts +2 -0
  202. package/lib/algorithm/index.js +17 -1
  203. package/lib/algorithm/index.js.map +1 -1
  204. package/lib/algorithm/outline.d.ts +1 -1
  205. package/lib/common/drag.d.ts +51 -0
  206. package/lib/common/drag.js +148 -0
  207. package/lib/common/drag.js.map +1 -0
  208. package/lib/common/history.d.ts +28 -0
  209. package/lib/common/history.js +95 -0
  210. package/lib/common/history.js.map +1 -0
  211. package/lib/common/index.d.ts +5 -0
  212. package/lib/common/index.js +22 -0
  213. package/lib/common/index.js.map +1 -0
  214. package/lib/common/keyboard.d.ts +34 -0
  215. package/lib/common/keyboard.js +86 -0
  216. package/lib/common/keyboard.js.map +1 -0
  217. package/lib/common/matrix.d.ts +30 -0
  218. package/lib/common/matrix.js +158 -0
  219. package/lib/common/matrix.js.map +1 -0
  220. package/lib/common/vector.d.ts +23 -0
  221. package/lib/common/vector.js +101 -0
  222. package/lib/common/vector.js.map +1 -0
  223. package/lib/constant/index.d.ts +39 -2
  224. package/lib/constant/index.js +42 -2
  225. package/lib/constant/index.js.map +1 -1
  226. package/lib/event/eventArgs.d.ts +103 -25
  227. package/lib/event/eventEmitter.d.ts +2 -2
  228. package/lib/event/eventEmitter.js +0 -1
  229. package/lib/event/eventEmitter.js.map +1 -1
  230. package/lib/index.d.ts +6 -1
  231. package/lib/index.js +7 -2
  232. package/lib/index.js.map +1 -1
  233. package/lib/keyboard/index.d.ts +1 -0
  234. package/lib/keyboard/index.js +15 -0
  235. package/lib/keyboard/index.js.map +1 -1
  236. package/lib/keyboard/shortcut.d.ts +8 -0
  237. package/lib/keyboard/shortcut.js +75 -9
  238. package/lib/keyboard/shortcut.js.map +1 -1
  239. package/lib/model/BaseModel.d.ts +16 -7
  240. package/lib/model/EditConfigModel.d.ts +97 -36
  241. package/lib/model/EditConfigModel.js +168 -81
  242. package/lib/model/EditConfigModel.js.map +1 -1
  243. package/lib/model/GraphModel.d.ts +36 -14
  244. package/lib/model/GraphModel.js +59 -9
  245. package/lib/model/GraphModel.js.map +1 -1
  246. package/lib/model/SnaplineModel.d.ts +2 -0
  247. package/lib/model/TransformModel.js +1 -1
  248. package/lib/model/TransformModel.js.map +1 -1
  249. package/lib/model/edge/BaseEdgeModel.d.ts +21 -17
  250. package/lib/model/edge/BaseEdgeModel.js +61 -39
  251. package/lib/model/edge/BaseEdgeModel.js.map +1 -1
  252. package/lib/model/edge/BezierEdgeModel.d.ts +5 -3
  253. package/lib/model/edge/BezierEdgeModel.js +6 -2
  254. package/lib/model/edge/BezierEdgeModel.js.map +1 -1
  255. package/lib/model/edge/LineEdgeModel.d.ts +2 -0
  256. package/lib/model/edge/LineEdgeModel.js +2 -1
  257. package/lib/model/edge/LineEdgeModel.js.map +1 -1
  258. package/lib/model/edge/PolylineEdgeModel.d.ts +5 -3
  259. package/lib/model/edge/PolylineEdgeModel.js +21 -14
  260. package/lib/model/edge/PolylineEdgeModel.js.map +1 -1
  261. package/lib/model/node/BaseNodeModel.d.ts +42 -14
  262. package/lib/model/node/BaseNodeModel.js +60 -46
  263. package/lib/model/node/BaseNodeModel.js.map +1 -1
  264. package/lib/model/node/CircleNodeModel.d.ts +4 -3
  265. package/lib/model/node/CircleNodeModel.js +4 -7
  266. package/lib/model/node/CircleNodeModel.js.map +1 -1
  267. package/lib/model/node/DiamondNodeModel.d.ts +5 -4
  268. package/lib/model/node/DiamondNodeModel.js +4 -6
  269. package/lib/model/node/DiamondNodeModel.js.map +1 -1
  270. package/lib/model/node/EllipseNodeModel.d.ts +5 -4
  271. package/lib/model/node/EllipseNodeModel.js +4 -6
  272. package/lib/model/node/EllipseNodeModel.js.map +1 -1
  273. package/lib/model/node/HtmlNodeModel.d.ts +4 -5
  274. package/lib/model/node/HtmlNodeModel.js +2 -12
  275. package/lib/model/node/HtmlNodeModel.js.map +1 -1
  276. package/lib/model/node/PolygonNodeModel.d.ts +5 -4
  277. package/lib/model/node/PolygonNodeModel.js +4 -7
  278. package/lib/model/node/PolygonNodeModel.js.map +1 -1
  279. package/lib/model/node/RectNodeModel.d.ts +7 -5
  280. package/lib/model/node/RectNodeModel.js +10 -7
  281. package/lib/model/node/RectNodeModel.js.map +1 -1
  282. package/lib/model/node/TextNodeModel.d.ts +17 -9
  283. package/lib/model/node/TextNodeModel.js +2 -1
  284. package/lib/model/node/TextNodeModel.js.map +1 -1
  285. package/lib/options.d.ts +6 -3
  286. package/lib/options.js +2 -11
  287. package/lib/options.js.map +1 -1
  288. package/lib/tool/MultipleSelectTool.d.ts +1 -1
  289. package/lib/tool/MultipleSelectTool.js +5 -5
  290. package/lib/tool/MultipleSelectTool.js.map +1 -1
  291. package/lib/tool/TextEditTool.d.ts +3 -3
  292. package/lib/tool/TextEditTool.js +4 -4
  293. package/lib/tool/TextEditTool.js.map +1 -1
  294. package/lib/tool/index.d.ts +24 -2
  295. package/lib/tool/index.js +85 -15
  296. package/lib/tool/index.js.map +1 -1
  297. package/lib/util/drag.d.ts +5 -5
  298. package/lib/util/drag.js +3 -1
  299. package/lib/util/drag.js.map +1 -1
  300. package/lib/util/edge.d.ts +9 -2
  301. package/lib/util/edge.js +27 -15
  302. package/lib/util/edge.js.map +1 -1
  303. package/lib/util/index.d.ts +1 -0
  304. package/lib/util/index.js +1 -0
  305. package/lib/util/index.js.map +1 -1
  306. package/lib/util/node.d.ts +8 -7
  307. package/lib/util/node.js +28 -9
  308. package/lib/util/node.js.map +1 -1
  309. package/lib/util/resize.d.ts +32 -0
  310. package/lib/util/resize.js +204 -0
  311. package/lib/util/resize.js.map +1 -0
  312. package/lib/view/Anchor.d.ts +6 -7
  313. package/lib/view/Anchor.js +5 -2
  314. package/lib/view/Anchor.js.map +1 -1
  315. package/lib/view/Control.d.ts +1 -1
  316. package/lib/view/Control.js +87 -38
  317. package/lib/view/Control.js.map +1 -1
  318. package/lib/view/Graph.d.ts +5 -1
  319. package/lib/view/Graph.js +42 -2
  320. package/lib/view/Graph.js.map +1 -1
  321. package/lib/view/Rotate.js +2 -1
  322. package/lib/view/Rotate.js.map +1 -1
  323. package/lib/view/behavior/index.d.ts +2 -0
  324. package/lib/view/behavior/index.js +19 -0
  325. package/lib/view/behavior/index.js.map +1 -0
  326. package/lib/view/behavior/snapline.d.ts +3 -0
  327. package/lib/{tool → view/behavior}/snapline.js +0 -1
  328. package/lib/view/behavior/snapline.js.map +1 -0
  329. package/lib/view/edge/AdjustPoint.js +11 -22
  330. package/lib/view/edge/AdjustPoint.js.map +1 -1
  331. package/lib/view/edge/BaseEdge.d.ts +2 -2
  332. package/lib/view/edge/BaseEdge.js +29 -21
  333. package/lib/view/edge/BaseEdge.js.map +1 -1
  334. package/lib/view/node/BaseNode.d.ts +4 -4
  335. package/lib/view/node/BaseNode.js +32 -23
  336. package/lib/view/node/BaseNode.js.map +1 -1
  337. package/lib/view/node/CircleNode.d.ts +1 -1
  338. package/lib/view/node/CircleNode.js.map +1 -1
  339. package/lib/view/node/DiamondNode.d.ts +1 -1
  340. package/lib/view/node/DiamondNode.js.map +1 -1
  341. package/lib/view/node/EllipseNode.d.ts +1 -1
  342. package/lib/view/node/EllipseNode.js.map +1 -1
  343. package/lib/view/node/HtmlNode.d.ts +1 -1
  344. package/lib/view/node/HtmlNode.js +2 -2
  345. package/lib/view/node/HtmlNode.js.map +1 -1
  346. package/lib/view/node/PolygonNode.d.ts +1 -1
  347. package/lib/view/node/PolygonNode.js.map +1 -1
  348. package/lib/view/node/RectNode.d.ts +1 -1
  349. package/lib/view/node/RectNode.js.map +1 -1
  350. package/lib/view/node/TextNode.d.ts +1 -1
  351. package/lib/view/node/TextNode.js +1 -1
  352. package/lib/view/node/TextNode.js.map +1 -1
  353. package/lib/view/overlay/CanvasOverlay.js +5 -4
  354. package/lib/view/overlay/CanvasOverlay.js.map +1 -1
  355. package/lib/view/overlay/ToolOverlay.d.ts +1 -1
  356. package/lib/view/overlay/ToolOverlay.js +1 -1
  357. package/lib/view/overlay/ToolOverlay.js.map +1 -1
  358. package/lib/view/shape/Circle.d.ts +9 -1
  359. package/lib/view/shape/Circle.js +5 -5
  360. package/lib/view/shape/Circle.js.map +1 -1
  361. package/lib/view/shape/Ellipse.d.ts +10 -1
  362. package/lib/view/shape/Ellipse.js +5 -5
  363. package/lib/view/shape/Ellipse.js.map +1 -1
  364. package/lib/view/shape/Line.d.ts +14 -1
  365. package/lib/view/shape/Line.js +5 -7
  366. package/lib/view/shape/Line.js.map +1 -1
  367. package/lib/view/shape/Path.d.ts +3 -2
  368. package/lib/view/shape/Path.js +3 -3
  369. package/lib/view/shape/Path.js.map +1 -1
  370. package/lib/view/shape/Polygon.d.ts +5 -3
  371. package/lib/view/shape/Polygon.js +6 -6
  372. package/lib/view/shape/Polygon.js.map +1 -1
  373. package/lib/view/shape/Polyline.d.ts +7 -1
  374. package/lib/view/shape/Polyline.js +8 -6
  375. package/lib/view/shape/Polyline.js.map +1 -1
  376. package/lib/view/shape/Rect.d.ts +11 -13
  377. package/lib/view/shape/Rect.js +6 -9
  378. package/lib/view/shape/Rect.js.map +1 -1
  379. package/lib/view/shape/Text.d.ts +19 -1
  380. package/lib/view/shape/Text.js +29 -21
  381. package/lib/view/shape/Text.js.map +1 -1
  382. package/lib/view/text/BaseText.d.ts +12 -15
  383. package/lib/view/text/BaseText.js +46 -29
  384. package/lib/view/text/BaseText.js.map +1 -1
  385. package/lib/view/text/LineText.d.ts +19 -7
  386. package/lib/view/text/LineText.js +62 -57
  387. package/lib/view/text/LineText.js.map +1 -1
  388. package/package.json +2 -1
  389. package/src/LogicFlow.tsx +163 -79
  390. package/src/algorithm/edge.ts +1 -0
  391. package/src/algorithm/index.ts +2 -0
  392. package/src/algorithm/outline.ts +2 -2
  393. package/src/common/drag.ts +219 -0
  394. package/src/common/history.ts +108 -0
  395. package/src/common/index.ts +6 -0
  396. package/src/common/keyboard.ts +108 -0
  397. package/src/common/matrix.ts +122 -0
  398. package/src/common/vector.ts +93 -0
  399. package/src/constant/index.ts +43 -1
  400. package/src/event/eventArgs.ts +173 -34
  401. package/src/event/eventEmitter.ts +2 -3
  402. package/src/index.ts +6 -1
  403. package/src/keyboard/index.ts +2 -0
  404. package/src/keyboard/shortcut.ts +79 -8
  405. package/src/model/BaseModel.ts +18 -7
  406. package/src/model/EditConfigModel.ts +209 -97
  407. package/src/model/GraphModel.ts +64 -9
  408. package/src/model/TransformModel.ts +1 -1
  409. package/src/model/edge/BaseEdgeModel.ts +75 -44
  410. package/src/model/edge/BezierEdgeModel.ts +7 -6
  411. package/src/model/edge/LineEdgeModel.ts +2 -0
  412. package/src/model/edge/PolylineEdgeModel.ts +24 -18
  413. package/src/model/node/BaseNodeModel.ts +72 -47
  414. package/src/model/node/CircleNodeModel.ts +8 -7
  415. package/src/model/node/DiamondNodeModel.ts +9 -6
  416. package/src/model/node/EllipseNodeModel.ts +9 -6
  417. package/src/model/node/HtmlNodeModel.ts +8 -7
  418. package/src/model/node/PolygonNodeModel.ts +9 -7
  419. package/src/model/node/RectNodeModel.ts +16 -8
  420. package/src/model/node/TextNodeModel.ts +14 -1
  421. package/src/options.ts +11 -15
  422. package/src/tool/MultipleSelectTool.tsx +6 -6
  423. package/src/tool/TextEditTool.tsx +3 -3
  424. package/src/tool/index.ts +96 -2
  425. package/src/util/drag.ts +22 -6
  426. package/src/util/edge.ts +39 -13
  427. package/src/util/index.ts +1 -0
  428. package/src/util/node.ts +36 -13
  429. package/src/util/resize.ts +286 -0
  430. package/src/view/Anchor.tsx +7 -5
  431. package/src/view/Control.tsx +93 -62
  432. package/src/view/Graph.tsx +21 -4
  433. package/src/view/Rotate.tsx +2 -1
  434. package/src/view/behavior/index.ts +2 -0
  435. package/src/{tool → view/behavior}/snapline.ts +3 -4
  436. package/src/view/edge/AdjustPoint.tsx +35 -49
  437. package/src/view/edge/BaseEdge.tsx +65 -45
  438. package/src/view/node/BaseNode.tsx +55 -28
  439. package/src/view/node/CircleNode.tsx +3 -1
  440. package/src/view/node/DiamondNode.tsx +3 -1
  441. package/src/view/node/EllipseNode.tsx +3 -1
  442. package/src/view/node/HtmlNode.tsx +5 -3
  443. package/src/view/node/PolygonNode.tsx +3 -1
  444. package/src/view/node/RectNode.tsx +3 -1
  445. package/src/view/node/TextNode.tsx +4 -2
  446. package/src/view/overlay/CanvasOverlay.tsx +5 -4
  447. package/src/view/overlay/ToolOverlay.tsx +1 -1
  448. package/src/view/shape/Circle.tsx +21 -7
  449. package/src/view/shape/Ellipse.tsx +20 -6
  450. package/src/view/shape/Line.tsx +24 -9
  451. package/src/view/shape/Path.tsx +9 -6
  452. package/src/view/shape/Polygon.tsx +13 -10
  453. package/src/view/shape/Polyline.tsx +20 -8
  454. package/src/view/shape/Rect.tsx +19 -19
  455. package/src/view/shape/Text.tsx +64 -33
  456. package/src/view/text/BaseText.tsx +76 -42
  457. package/src/view/text/LineText.tsx +94 -80
  458. package/tsconfig.json +1 -1
  459. package/es/tool/snapline.d.ts +0 -3
  460. package/es/tool/snapline.js.map +0 -1
  461. package/es/tool/tool.d.ts +0 -22
  462. package/es/tool/tool.js +0 -43
  463. package/es/tool/tool.js.map +0 -1
  464. package/lib/tool/snapline.d.ts +0 -3
  465. package/lib/tool/snapline.js.map +0 -1
  466. package/lib/tool/tool.d.ts +0 -22
  467. package/lib/tool/tool.js +0 -49
  468. package/lib/tool/tool.js.map +0 -1
  469. package/src/tool/tool.ts +0 -66
@@ -5,7 +5,7 @@ import Anchor from '../Anchor'
5
5
  import { BaseText } from '../text'
6
6
  import LogicFlow from '../../LogicFlow'
7
7
  import { GraphModel, BaseNodeModel, Model } from '../../model'
8
- import { ElementState, EventType } from '../../constant'
8
+ import { ElementState, EventType, TextMode } from '../../constant'
9
9
  import {
10
10
  StepDrag,
11
11
  snapToGrid,
@@ -29,7 +29,10 @@ type IState = {
29
29
  isDragging?: boolean
30
30
  }
31
31
 
32
- export abstract class BaseNode<P extends IProps> extends Component<P, IState> {
32
+ export abstract class BaseNode<P extends IProps = IProps> extends Component<
33
+ P,
34
+ IState
35
+ > {
33
36
  static isObserved: boolean = false
34
37
  static extendsKey?: string
35
38
 
@@ -106,7 +109,7 @@ export abstract class BaseNode<P extends IProps> extends Component<P, IState> {
106
109
  anchorIndex={index}
107
110
  nodeModel={model}
108
111
  graphModel={graphModel}
109
- setHoverOFF={this.setHoverOFF}
112
+ setHoverOff={this.setHoverOff}
110
113
  />
111
114
  )
112
115
  })
@@ -116,9 +119,16 @@ export abstract class BaseNode<P extends IProps> extends Component<P, IState> {
116
119
 
117
120
  getRotateControl() {
118
121
  const { model, graphModel } = this.props
119
- const { isSelected, isHitable, enableRotate, isHovered } = model
122
+ const {
123
+ editConfigModel: { isSilentMode, allowRotate },
124
+ } = graphModel
125
+ const { isSelected, isHitable, rotatable, isHovered } = model
126
+
127
+ // 合并全局 allResize 和节点自身的 resizable 配置,以节点配置高于全局配置
128
+ const canRotate = allowRotate && rotatable // 全局开关 > 节点配置
129
+
120
130
  const style = model.getRotateControlStyle()
121
- if (isHitable && (isSelected || isHovered) && enableRotate) {
131
+ if (!isSilentMode && isHitable && (isSelected || isHovered) && canRotate) {
122
132
  return (
123
133
  <RotateControlPoint
124
134
  graphModel={graphModel}
@@ -132,9 +142,15 @@ export abstract class BaseNode<P extends IProps> extends Component<P, IState> {
132
142
 
133
143
  getResizeControl(): h.JSX.Element | null {
134
144
  const { model, graphModel } = this.props
135
- const { isSelected, isHitable, enableResize, isHovered } = model
145
+ const {
146
+ editConfigModel: { isSilentMode, allowResize },
147
+ } = graphModel
148
+ const { isSelected, isHitable, resizable, isHovered } = model
149
+
150
+ // 合并全局 allResize 和节点自身的 resizable 配置,以节点配置高于全局配置
151
+ const canResize = allowResize && resizable // 全局开关 > 节点配置
136
152
  const style = model.getResizeControlStyle()
137
- if (isHitable && (isSelected || isHovered) && enableResize) {
153
+ if (!isSilentMode && isHitable && (isSelected || isHovered) && canResize) {
138
154
  return (
139
155
  <ResizeControlGroup
140
156
  style={style}
@@ -148,14 +164,16 @@ export abstract class BaseNode<P extends IProps> extends Component<P, IState> {
148
164
 
149
165
  getText(): h.JSX.Element | null {
150
166
  const { model, graphModel } = this.props
167
+ const { editConfigModel } = graphModel
168
+
169
+ // 当 节点文本模式非 TEXT 时,不显示文本
170
+ if (editConfigModel.nodeTextMode !== TextMode.TEXT) return null
151
171
  // 文本被编辑的时候,显示编辑框,不显示文本。
152
- if (model.state === ElementState.TEXT_EDIT) {
153
- return null
154
- }
172
+ if (model.state === ElementState.TEXT_EDIT) return null
173
+
155
174
  if (model.text) {
156
- const { editConfigModel } = graphModel
157
175
  let draggable = false
158
- if (model.text.draggable || editConfigModel.nodeTextDraggable) {
176
+ if (editConfigModel.nodeTextDraggable && model.text.draggable) {
159
177
  draggable = true
160
178
  }
161
179
  return (
@@ -189,7 +207,7 @@ export abstract class BaseNode<P extends IProps> extends Component<P, IState> {
189
207
  break
190
208
  }
191
209
  if (isDragging) {
192
- className += ' lf-isDragging'
210
+ className += ' lf-dragging'
193
211
  }
194
212
  if (isSelected) {
195
213
  className += ' lf-node-selected'
@@ -212,9 +230,9 @@ export abstract class BaseNode<P extends IProps> extends Component<P, IState> {
212
230
  }
213
231
  }
214
232
  }
233
+
215
234
  onDragging = ({ event }: IDragParams) => {
216
235
  const { model, graphModel } = this.props
217
- // const { isDragging } = model;
218
236
  const {
219
237
  editConfigModel: { stopMoveGraph, autoExpand },
220
238
  transformModel,
@@ -294,6 +312,7 @@ export abstract class BaseNode<P extends IProps> extends Component<P, IState> {
294
312
  graphModel.moveNodes(moveNodes, x - model.x, y - model.y)
295
313
  }
296
314
  }
315
+
297
316
  onDragEnd = () => {
298
317
  if (this.t) {
299
318
  cancelRaf(this.t)
@@ -301,10 +320,17 @@ export abstract class BaseNode<P extends IProps> extends Component<P, IState> {
301
320
  const { model } = this.props
302
321
  model.isDragging = false
303
322
  }
323
+ onMouseOut = (ev: MouseEvent) => {
324
+ if (isIe) {
325
+ this.setHoverOff(ev)
326
+ }
327
+ }
328
+
304
329
  handleMouseUp = () => {
305
330
  const { model } = this.props
306
331
  this.mouseUpDrag = model.isDragging
307
332
  }
333
+
308
334
  handleClick = (e: MouseEvent) => {
309
335
  // 节点拖拽进画布之后,不触发click事件相关emit
310
336
  // 点拖拽进画布没有触发mousedown事件,没有startTime,用这个值做区分
@@ -350,9 +376,11 @@ export abstract class BaseNode<P extends IProps> extends Component<P, IState> {
350
376
 
351
377
  // 不是双击的,默认都是单击
352
378
  if (isDoubleClick) {
353
- if (editConfigModel.nodeTextEdit && model.text.editable) {
354
- model.setSelected(false)
355
- graphModel.setElementStateById(model.id, ElementState.TEXT_EDIT)
379
+ if (editConfigModel.nodeTextEdit) {
380
+ if (model.text.editable) {
381
+ model.setSelected(false)
382
+ graphModel.setElementStateById(model.id, ElementState.TEXT_EDIT)
383
+ }
356
384
  }
357
385
  graphModel.eventCenter.emit(EventType.NODE_DBCLICK, eventOptions)
358
386
  } else {
@@ -360,6 +388,7 @@ export abstract class BaseNode<P extends IProps> extends Component<P, IState> {
360
388
  graphModel.eventCenter.emit(EventType.NODE_CLICK, eventOptions)
361
389
  }
362
390
  }
391
+
363
392
  handleContextMenu = (ev: MouseEvent) => {
364
393
  ev.preventDefault()
365
394
  const { model, graphModel } = this.props
@@ -385,6 +414,7 @@ export abstract class BaseNode<P extends IProps> extends Component<P, IState> {
385
414
  })
386
415
  this.toFront()
387
416
  }
417
+
388
418
  handleMouseDown = (ev: MouseEvent) => {
389
419
  const { model, graphModel } = this.props
390
420
  this.startTime = new Date().getTime()
@@ -393,9 +423,9 @@ export abstract class BaseNode<P extends IProps> extends Component<P, IState> {
393
423
  this.stepDrag && this.stepDrag.handleMouseDown(ev)
394
424
  }
395
425
  }
396
- // 为什么将hover状态放到model中?
426
+
397
427
  // 因为自定义节点的时候,可能会基于hover状态自定义不同的样式。
398
- setHoverON = (ev: MouseEvent) => {
428
+ setHoverOn = (ev: MouseEvent) => {
399
429
  const { model, graphModel } = this.props
400
430
  if (model.isHovered) return
401
431
  const nodeData = model.getData()
@@ -405,9 +435,11 @@ export abstract class BaseNode<P extends IProps> extends Component<P, IState> {
405
435
  e: ev,
406
436
  })
407
437
  }
408
- setHoverOFF = (ev: MouseEvent) => {
438
+
439
+ setHoverOff = (ev: MouseEvent) => {
409
440
  const { model, graphModel } = this.props
410
441
  const nodeData = model.getData()
442
+ // 文本focus时,关联的元素也需要高亮,所以元素失焦时还要判断下是否有文本处于focus状态
411
443
  if (!model.isHovered) return
412
444
  model.setHovered(false)
413
445
  graphModel.eventCenter.emit(EventType.NODE_MOUSELEAVE, {
@@ -415,11 +447,6 @@ export abstract class BaseNode<P extends IProps> extends Component<P, IState> {
415
447
  e: ev,
416
448
  })
417
449
  }
418
- onMouseOut = (ev: MouseEvent) => {
419
- if (isIe) {
420
- this.setHoverOFF(ev)
421
- }
422
- }
423
450
 
424
451
  /**
425
452
  * @overridable 支持重写, 节点置顶,可以被某些不需要置顶的节点重写,如group节点。
@@ -476,9 +503,9 @@ export abstract class BaseNode<P extends IProps> extends Component<P, IState> {
476
503
  onMouseDown={this.handleMouseDown}
477
504
  onMouseUp={this.handleMouseUp}
478
505
  onClick={this.handleClick}
479
- onMouseEnter={this.setHoverON}
480
- onMouseOver={this.setHoverON}
481
- onMouseLeave={this.setHoverOFF}
506
+ onMouseEnter={this.setHoverOn}
507
+ onMouseOver={this.setHoverOn}
508
+ onMouseLeave={this.setHoverOff}
482
509
  onMouseOut={this.onMouseOut}
483
510
  onContextMenu={this.handleContextMenu}
484
511
  {...restAttributes}
@@ -7,7 +7,9 @@ export type ICircleNodeProps = {
7
7
  graphModel: GraphModel
8
8
  }
9
9
 
10
- export class CircleNode extends BaseNode<ICircleNodeProps> {
10
+ export class CircleNode<
11
+ P extends ICircleNodeProps = ICircleNodeProps,
12
+ > extends BaseNode<P> {
11
13
  getShape() {
12
14
  const { model } = this.props
13
15
  const { x, y, r } = model
@@ -7,7 +7,9 @@ export type IDiamondNodeProps = {
7
7
  graphModel: GraphModel
8
8
  }
9
9
 
10
- export class DiamondNode extends BaseNode<IDiamondNodeProps> {
10
+ export class DiamondNode<
11
+ P extends IDiamondNodeProps = IDiamondNodeProps,
12
+ > extends BaseNode<P> {
11
13
  getShape() {
12
14
  const { model } = this.props
13
15
  const style = model.getNodeStyle()
@@ -7,7 +7,9 @@ export type IEllipseNodeProps = {
7
7
  graphModel: GraphModel
8
8
  }
9
9
 
10
- export class EllipseNode extends BaseNode<IEllipseNodeProps> {
10
+ export class EllipseNode<
11
+ P extends IEllipseNodeProps = IEllipseNodeProps,
12
+ > extends BaseNode<P> {
11
13
  getShape() {
12
14
  const { model } = this.props
13
15
  const style = model.getNodeStyle()
@@ -7,7 +7,9 @@ export type IHtmlNodeProps = {
7
7
  graphModel: GraphModel
8
8
  }
9
9
 
10
- export class HtmlNode extends BaseNode<IHtmlNodeProps> {
10
+ export class HtmlNode<
11
+ P extends IHtmlNodeProps = IHtmlNodeProps,
12
+ > extends BaseNode<P> {
11
13
  ref = createRef()
12
14
  currentProperties?: string
13
15
  preProperties?: string
@@ -52,14 +54,14 @@ export class HtmlNode extends BaseNode<IHtmlNodeProps> {
52
54
  }
53
55
 
54
56
  componentDidMount() {
55
- console.log('HtmlNode --->>> componentDidMount - 初始化内容')
57
+ // console.log('HtmlNode --->>> componentDidMount - 初始化内容')
56
58
  if (this.shouldUpdate() && this.rootEl) {
57
59
  this.setHtml(this.rootEl)
58
60
  }
59
61
  }
60
62
 
61
63
  componentDidUpdate() {
62
- console.log('HtmlNode --->>> componentDidUpdate - 更新节点内容')
64
+ // console.log('HtmlNode --->>> componentDidUpdate - 更新节点内容')
63
65
  // DONE: 将 componentDidMount 和 componentDidUpdate 区分开,如果写在一次,渲染 React 组件会重复初始化,消耗过多资源
64
66
  // 为了保证历史兼容性,先将默认 HTML 节点的 setHtml 和 confirmUpdate 保持一直,用户可通过自定义的方式重新定义
65
67
  if (this.shouldUpdate() && this.rootEl) {
@@ -7,7 +7,9 @@ export type IPolygonNodeProps = {
7
7
  graphModel: GraphModel
8
8
  }
9
9
 
10
- export class PolygonNode extends BaseNode<IPolygonNodeProps> {
10
+ export class PolygonNode<
11
+ P extends IPolygonNodeProps = IPolygonNodeProps,
12
+ > extends BaseNode<P> {
11
13
  getShape() {
12
14
  const { model } = this.props
13
15
  const { x, y, width, height, points } = model as PolygonNodeModel
@@ -8,7 +8,9 @@ export type IRectNodeProps = {
8
8
  graphModel: GraphModel
9
9
  }
10
10
 
11
- export class RectNode extends BaseNode<IRectNodeProps> {
11
+ export class RectNode<
12
+ P extends IRectNodeProps = IRectNodeProps,
13
+ > extends BaseNode<P> {
12
14
  getShape(): h.JSX.Element | null {
13
15
  const { model } = this.props
14
16
  const style = model.getNodeStyle()
@@ -7,7 +7,9 @@ export type ITextNodeProps = {
7
7
  graphModel: GraphModel
8
8
  }
9
9
 
10
- export class TextNode extends BaseNode<ITextNodeProps> {
10
+ export class TextNode<
11
+ P extends ITextNodeProps = ITextNodeProps,
12
+ > extends BaseNode<P> {
11
13
  getBackground() {
12
14
  const { model } = this.props
13
15
  const style = model.getTextStyle()
@@ -18,7 +20,7 @@ export class TextNode extends BaseNode<ITextNodeProps> {
18
20
  const rectAttr = {
19
21
  ...style.background,
20
22
  x,
21
- y: y - 1,
23
+ y,
22
24
  width,
23
25
  height,
24
26
  }
@@ -33,7 +33,7 @@ export class CanvasOverlay extends Component<IProps, IState> {
33
33
  eventCenter,
34
34
  model: undefined,
35
35
  })
36
- // 当ctrl键被按住的时候,可以放大缩小。
36
+ // 当 ctrl、cmd 键被按住的时候,可以放大缩小。
37
37
  this.state = {
38
38
  isDragging: false,
39
39
  }
@@ -65,8 +65,8 @@ export class CanvasOverlay extends Component<IProps, IState> {
65
65
  graphModel,
66
66
  } = this.props
67
67
  const { deltaX: eX, deltaY: eY } = ev
68
- // 如果没有禁止滚动移动画布, 并且当前触发的时候ctrl键没有按住, 那么移动画布
69
- if (!editConfigModel.stopScrollGraph && ev.ctrlKey !== true) {
68
+ // 如果没有禁止滚动移动画布, 并且当前触发的时候ctrl键、cmd键没有按住, 那么移动画布
69
+ if (!editConfigModel.stopScrollGraph && !ev.ctrlKey && !ev.metaKey) {
70
70
  ev.preventDefault()
71
71
  this.stepScrollX += eX
72
72
  this.stepScrollY += eY
@@ -84,7 +84,7 @@ export class CanvasOverlay extends Component<IProps, IState> {
84
84
  }
85
85
  return
86
86
  }
87
- // 如果没有禁止缩放画布,那么进行缩放. 在禁止缩放画布后,按住ctrl键也不能缩放了。
87
+ // 如果没有禁止缩放画布,那么进行缩放. 在禁止缩放画布后,按住 ctrl、cmd 键也不能缩放了。
88
88
  if (!editConfigModel.stopZoomGraph) {
89
89
  ev.preventDefault()
90
90
  const position = graphModel.getPointByClient({
@@ -123,6 +123,7 @@ export class CanvasOverlay extends Component<IProps, IState> {
123
123
  })
124
124
  }
125
125
  }
126
+ // 鼠标、触摸板 按下
126
127
  mouseDownHandler = (ev: MouseEvent) => {
127
128
  const {
128
129
  graphModel: {
@@ -35,7 +35,7 @@ export class ToolOverlay extends Component<IProps> {
35
35
  h(t, {
36
36
  textEditElement,
37
37
  graphModel,
38
- logicFlow: tool.instance,
38
+ lf: tool.instance,
39
39
  }),
40
40
  )
41
41
  tool.components = components
@@ -1,26 +1,40 @@
1
- export function Circle(props) {
1
+ import { createElement as h } from 'preact/compat'
2
+ import { forEach, toPairs } from 'lodash-es'
3
+ import { LogicFlow } from '../..'
4
+
5
+ export type ICircleProps = {
6
+ x?: number
7
+ y?: number
8
+ r?: number
9
+ className?: string
10
+ } & LogicFlow.CommonTheme
11
+
12
+ export function Circle(props: ICircleProps): h.JSX.Element {
2
13
  const { x = 0, y = 0, r = 4, className } = props
3
- const attrs: Record<string, any> = {
14
+
15
+ const attrs: ICircleProps = {
4
16
  cx: x,
5
17
  cy: y,
6
18
  r,
7
19
  fill: 'transparent',
8
20
  fillOpacity: 1,
9
- strokeWidth: '1',
21
+ strokeWidth: 1,
10
22
  stroke: '#000',
11
23
  strokeOpacity: 1,
12
24
  }
13
- Object.entries(props).forEach(([k, v]) => {
14
- const valueType = typeof v
15
- if (valueType !== 'object') {
25
+
26
+ forEach(toPairs(props), ([k, v]: [k: string, v: any]) => {
27
+ if (typeof v !== 'object') {
16
28
  attrs[k] = v
17
29
  }
18
30
  })
31
+
19
32
  if (className) {
20
33
  attrs.className = `lf-basic-shape ${className}`
21
34
  } else {
22
- attrs.className = 'lf-shape'
35
+ attrs.className = `lf-basic-shape`
23
36
  }
37
+
24
38
  return <circle {...attrs} />
25
39
  }
26
40
 
@@ -1,5 +1,18 @@
1
- export function Ellipse(props) {
1
+ import { createElement as h } from 'preact/compat'
2
+ import { forEach, toPairs } from 'lodash-es'
3
+ import { LogicFlow } from '../..'
4
+
5
+ export type IEllipseProps = {
6
+ x?: number
7
+ y?: number
8
+ rx?: number
9
+ ry?: number
10
+ className?: string
11
+ } & LogicFlow.CommonTheme
12
+
13
+ export function Ellipse(props: IEllipseProps): h.JSX.Element {
2
14
  const { x = 0, y = 0, rx = 4, ry = 4, className } = props
15
+
3
16
  const attrs: Record<string, any> = {
4
17
  cx: x,
5
18
  cy: y,
@@ -7,21 +20,22 @@ export function Ellipse(props) {
7
20
  ry,
8
21
  fill: 'transparent',
9
22
  fillOpacity: 1,
10
- strokeWidth: '1',
23
+ strokeWidth: 1,
11
24
  stroke: '#000',
12
25
  strokeOpacity: 1,
13
26
  }
14
- Object.entries(props).forEach(([k, v]) => {
15
- const valueType = typeof v
16
- if (valueType !== 'object') {
27
+ forEach(toPairs(props), ([k, v]: [k: string, v: any]) => {
28
+ if (typeof v !== 'object') {
17
29
  attrs[k] = v
18
30
  }
19
31
  })
32
+
20
33
  if (className) {
21
34
  attrs.className = `lf-basic-shape ${className}`
22
35
  } else {
23
- attrs.className = 'lf-shape'
36
+ attrs.className = `lf-basic-shape`
24
37
  }
38
+
25
39
  return <ellipse {...attrs} />
26
40
  }
27
41
 
@@ -1,23 +1,38 @@
1
- export function Line(props) {
2
- const attrs = {
1
+ import { createElement as h } from 'preact/compat'
2
+ import { forEach, toPairs } from 'lodash-es'
3
+
4
+ export type ILineProps = {
5
+ id?: string
6
+ tabindex?: number
7
+ x1?: number
8
+ y1?: number
9
+ x2?: number
10
+ y2?: number
11
+ stroke?: string // Color
12
+ className?: string
13
+ style?: h.JSX.CSSProperties
14
+ [key: string]: any
15
+ }
16
+
17
+ export function Line(props: ILineProps): h.JSX.Element {
18
+ const attrs: ILineProps = {
3
19
  // default
4
20
  x1: 10,
5
21
  y1: 10,
6
22
  x2: 20,
7
23
  y2: 20,
8
24
  stroke: 'black',
9
- // ...props,
25
+ // ...props
10
26
  }
11
- Object.entries(props).forEach(([k, v]) => {
27
+
28
+ forEach(toPairs(props), ([k, v]: [k: string, v: any]) => {
12
29
  if (k === 'style') {
13
30
  attrs[k] = v
14
- } else {
15
- const valueType = typeof v
16
- if (valueType !== 'object') {
17
- attrs[k] = v
18
- }
31
+ } else if (typeof v !== 'object') {
32
+ attrs[k] = v
19
33
  }
20
34
  })
35
+
21
36
  return <line {...attrs} />
22
37
  }
23
38
 
@@ -1,18 +1,21 @@
1
- type IProps = {
1
+ import { createElement as h } from 'preact/compat'
2
+ import { forEach, toPairs } from 'lodash-es'
3
+
4
+ export type IPathProps = {
2
5
  d: string
3
6
  [key: string]: any
4
7
  }
5
8
 
6
- export function Path(props: IProps) {
7
- const attrs = {
9
+ export function Path(props: IPathProps): h.JSX.Element {
10
+ const attrs: Record<string, any> = {
8
11
  d: '',
9
12
  }
10
- Object.entries(props).forEach(([k, v]) => {
11
- const valueType = typeof v
12
- if (k === 'style' || valueType !== 'object') {
13
+ forEach(toPairs(props), ([k, v]: [key: string, v: any]) => {
14
+ if (k === 'style' || typeof v !== 'object') {
13
15
  attrs[k] = v
14
16
  }
15
17
  })
18
+
16
19
  return <path {...attrs} />
17
20
  }
18
21
 
@@ -1,14 +1,16 @@
1
- import LogicFlow from '../../LogicFlow'
1
+ import { createElement as h } from 'preact/compat'
2
+ import { forEach, toPairs } from 'lodash-es'
3
+ import { LogicFlow } from '../..'
2
4
 
3
- // TODO: 定义基础图形的类型
4
5
  export type IPolygonProps = {
5
6
  points: LogicFlow.PointTuple[]
7
+ x?: number
8
+ y?: number
6
9
  className?: string
7
- [key: string]: any
8
10
  }
9
11
 
10
- export function Polygon(props: IPolygonProps) {
11
- const { points, className } = props
12
+ export function Polygon(props: IPolygonProps): h.JSX.Element {
13
+ const { points = [], className } = props
12
14
  const attrs: Record<string, any> = {
13
15
  fill: 'transparent',
14
16
  fillOpacity: 1,
@@ -17,16 +19,17 @@ export function Polygon(props: IPolygonProps) {
17
19
  strokeOpacity: 1,
18
20
  points: '',
19
21
  }
20
- Object.entries(props).forEach(([k, v]) => {
21
- const valueType = typeof v
22
- if (valueType !== 'object') {
22
+
23
+ forEach(toPairs(props), ([k, v]: [k: string, v: any]) => {
24
+ if (typeof v !== 'object') {
23
25
  attrs[k] = v
24
26
  }
25
27
  })
28
+
26
29
  if (className) {
27
- attrs.className = `lf-basic-shape ${className}`
30
+ attrs.classNmae = `lf-basic-shape ${className}`
28
31
  } else {
29
- attrs.className = 'lf-shape'
32
+ attrs.className = 'lf-basic-shape'
30
33
  }
31
34
  attrs.points = points.map((point) => point.join(',')).join(' ')
32
35
 
@@ -1,18 +1,30 @@
1
- export function Polyline(props) {
2
- const attrs = {
1
+ import { createElement as h } from 'preact/compat'
2
+ import { forEach, toPairs } from 'lodash-es'
3
+
4
+ export type IPolylineProps = {
5
+ points: string
6
+ pathLength?: number | 'none'
7
+ className?: string
8
+ }
9
+
10
+ export function Polyline(props: IPolylineProps): h.JSX.Element {
11
+ const { className } = props
12
+ const attrs: Record<string, unknown> = {
3
13
  points: '',
4
14
  fill: 'none',
5
15
  }
6
- Object.entries(props).forEach(([k, v]) => {
16
+
17
+ forEach(toPairs(props), ([k, v]: [k: string, v: unknown]) => {
7
18
  if (k === 'style') {
8
19
  attrs[k] = v
9
- } else {
10
- const valueType = typeof v
11
- if (valueType !== 'object') {
12
- attrs[k] = v
13
- }
20
+ } else if (typeof v !== 'object') {
21
+ attrs[k] = v
14
22
  }
15
23
  })
24
+ if (className) {
25
+ attrs.className = `${className}`
26
+ }
27
+
16
28
  return <polyline {...attrs} />
17
29
  }
18
30