@logicflow/core 2.2.0 → 2.2.2

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 (361) hide show
  1. package/dist/docs/api/logicflow-constructor/index.en.md +106 -0
  2. package/dist/docs/api/logicflow-constructor/index.zh.md +106 -0
  3. package/dist/docs/api/logicflow-constructor/use.en.md +61 -0
  4. package/dist/docs/api/logicflow-constructor/use.zh.md +61 -0
  5. package/dist/docs/api/logicflow-instance/canvas.en.md +197 -0
  6. package/dist/docs/api/logicflow-instance/canvas.zh.md +199 -0
  7. package/dist/docs/api/logicflow-instance/edge.en.md +273 -0
  8. package/dist/docs/api/logicflow-instance/edge.zh.md +273 -0
  9. package/dist/docs/api/logicflow-instance/edit-config.en.md +59 -0
  10. package/dist/docs/api/logicflow-instance/edit-config.zh.md +59 -0
  11. package/dist/docs/api/logicflow-instance/element.en.md +375 -0
  12. package/dist/docs/api/logicflow-instance/element.zh.md +379 -0
  13. package/dist/docs/api/logicflow-instance/event.en.md +326 -0
  14. package/dist/docs/api/logicflow-instance/event.zh.md +406 -0
  15. package/dist/docs/api/logicflow-instance/history.en.md +38 -0
  16. package/dist/docs/api/logicflow-instance/history.zh.md +38 -0
  17. package/dist/docs/api/logicflow-instance/index.en.md +41 -0
  18. package/dist/docs/api/logicflow-instance/index.zh.md +41 -0
  19. package/dist/docs/api/logicflow-instance/node.en.md +308 -0
  20. package/dist/docs/api/logicflow-instance/node.zh.md +308 -0
  21. package/dist/docs/api/logicflow-instance/register.en.md +76 -0
  22. package/dist/docs/api/logicflow-instance/register.zh.md +76 -0
  23. package/dist/docs/api/logicflow-instance/render-and-data.en.md +179 -0
  24. package/dist/docs/api/logicflow-instance/render-and-data.zh.md +181 -0
  25. package/dist/docs/api/logicflow-instance/text.en.md +60 -0
  26. package/dist/docs/api/logicflow-instance/text.zh.md +60 -0
  27. package/dist/docs/api/logicflow-instance/theme.en.md +179 -0
  28. package/dist/docs/api/logicflow-instance/theme.zh.md +179 -0
  29. package/dist/docs/api/runtime-model/edgeModel.en.md +29 -0
  30. package/dist/docs/api/runtime-model/edgeModel.zh.md +325 -0
  31. package/dist/docs/api/runtime-model/graphModel.en.md +275 -0
  32. package/dist/docs/api/runtime-model/graphModel.zh.md +1153 -0
  33. package/dist/docs/api/runtime-model/nodeModel.en.md +37 -0
  34. package/dist/docs/api/runtime-model/nodeModel.zh.md +644 -0
  35. package/dist/docs/api/type/MainTypes.en.md +598 -0
  36. package/dist/docs/api/type/MainTypes.zh.md +867 -0
  37. package/dist/docs/api/type/Theme.en.md +187 -0
  38. package/dist/docs/api/type/Theme.zh.md +187 -0
  39. package/dist/docs/api/type/canvas-types.en.md +25 -0
  40. package/dist/docs/api/type/canvas-types.zh.md +25 -0
  41. package/dist/docs/api/type/index.en.md +96 -0
  42. package/dist/docs/api/type/index.zh.md +99 -0
  43. package/dist/docs/api/type/node-types.en.md +21 -0
  44. package/dist/docs/api/type/node-types.zh.md +21 -0
  45. package/dist/docs/api/type/plugin-types.en.md +24 -0
  46. package/dist/docs/api/type/plugin-types.zh.md +24 -0
  47. package/dist/docs/index.md +11 -0
  48. package/dist/docs/tutorial/about.en.md +38 -0
  49. package/dist/docs/tutorial/about.zh.md +65 -0
  50. package/dist/docs/tutorial/advanced/dnd.en.md +62 -0
  51. package/dist/docs/tutorial/advanced/dnd.zh.md +52 -0
  52. package/dist/docs/tutorial/advanced/edge.en.md +64 -0
  53. package/dist/docs/tutorial/advanced/edge.zh.md +66 -0
  54. package/dist/docs/tutorial/advanced/keyboard.en.md +70 -0
  55. package/dist/docs/tutorial/advanced/keyboard.zh.md +67 -0
  56. package/dist/docs/tutorial/advanced/node.en.md +338 -0
  57. package/dist/docs/tutorial/advanced/node.zh.md +338 -0
  58. package/dist/docs/tutorial/advanced/react.en.md +106 -0
  59. package/dist/docs/tutorial/advanced/react.zh.md +114 -0
  60. package/dist/docs/tutorial/advanced/silent-mode.en.md +75 -0
  61. package/dist/docs/tutorial/advanced/silent-mode.zh.md +71 -0
  62. package/dist/docs/tutorial/advanced/snapline.en.md +54 -0
  63. package/dist/docs/tutorial/advanced/vue.en.md +249 -0
  64. package/dist/docs/tutorial/advanced/vue.zh.md +248 -0
  65. package/dist/docs/tutorial/ai.en.md +64 -0
  66. package/dist/docs/tutorial/ai.zh.md +64 -0
  67. package/dist/docs/tutorial/basic/background.en.md +50 -0
  68. package/dist/docs/tutorial/basic/canvas.en.md +164 -0
  69. package/dist/docs/tutorial/basic/canvas.zh.md +183 -0
  70. package/dist/docs/tutorial/basic/class.en.md +106 -0
  71. package/dist/docs/tutorial/basic/class.zh.md +103 -0
  72. package/dist/docs/tutorial/basic/edge.en.md +151 -0
  73. package/dist/docs/tutorial/basic/edge.zh.md +152 -0
  74. package/dist/docs/tutorial/basic/event.en.md +70 -0
  75. package/dist/docs/tutorial/basic/event.zh.md +66 -0
  76. package/dist/docs/tutorial/basic/grid.en.md +77 -0
  77. package/dist/docs/tutorial/basic/node.en.md +358 -0
  78. package/dist/docs/tutorial/basic/node.zh.md +318 -0
  79. package/dist/docs/tutorial/basic/theme.en.md +154 -0
  80. package/dist/docs/tutorial/basic/theme.zh.md +157 -0
  81. package/dist/docs/tutorial/extension/adapter.en.md +446 -0
  82. package/dist/docs/tutorial/extension/adapter.zh.md +429 -0
  83. package/dist/docs/tutorial/extension/bpmn-element.en.md +1427 -0
  84. package/dist/docs/tutorial/extension/bpmn-element.zh.md +1472 -0
  85. package/dist/docs/tutorial/extension/control.en.md +117 -0
  86. package/dist/docs/tutorial/extension/control.zh.md +118 -0
  87. package/dist/docs/tutorial/extension/curved-edge.en.md +46 -0
  88. package/dist/docs/tutorial/extension/curved-edge.zh.md +46 -0
  89. package/dist/docs/tutorial/extension/custom.en.md +142 -0
  90. package/dist/docs/tutorial/extension/custom.zh.md +138 -0
  91. package/dist/docs/tutorial/extension/dnd-panel.en.md +109 -0
  92. package/dist/docs/tutorial/extension/dnd-panel.zh.md +109 -0
  93. package/dist/docs/tutorial/extension/dynamic-group.en.md +606 -0
  94. package/dist/docs/tutorial/extension/dynamic-group.zh.md +606 -0
  95. package/dist/docs/tutorial/extension/group.en.md +217 -0
  96. package/dist/docs/tutorial/extension/group.zh.md +209 -0
  97. package/dist/docs/tutorial/extension/highlight.en.md +50 -0
  98. package/dist/docs/tutorial/extension/highlight.zh.md +50 -0
  99. package/dist/docs/tutorial/extension/insert-node-in-polyline.en.md +52 -0
  100. package/dist/docs/tutorial/extension/insert-node-in-polyline.zh.md +47 -0
  101. package/dist/docs/tutorial/extension/intro.en.md +72 -0
  102. package/dist/docs/tutorial/extension/intro.zh.md +95 -0
  103. package/dist/docs/tutorial/extension/label.en.md +136 -0
  104. package/dist/docs/tutorial/extension/label.zh.md +135 -0
  105. package/dist/docs/tutorial/extension/layout.en.md +156 -0
  106. package/dist/docs/tutorial/extension/layout.zh.md +156 -0
  107. package/dist/docs/tutorial/extension/menu.en.md +319 -0
  108. package/dist/docs/tutorial/extension/menu.zh.md +377 -0
  109. package/dist/docs/tutorial/extension/minimap.en.md +164 -0
  110. package/dist/docs/tutorial/extension/minimap.zh.md +180 -0
  111. package/dist/docs/tutorial/extension/node-resize.en.md +199 -0
  112. package/dist/docs/tutorial/extension/node-resize.zh.md +221 -0
  113. package/dist/docs/tutorial/extension/pool.en.md +227 -0
  114. package/dist/docs/tutorial/extension/pool.zh.md +227 -0
  115. package/dist/docs/tutorial/extension/proximity-connect.en.md +104 -0
  116. package/dist/docs/tutorial/extension/proximity-connect.zh.md +107 -0
  117. package/dist/docs/tutorial/extension/selection.en.md +166 -0
  118. package/dist/docs/tutorial/extension/selection.zh.md +150 -0
  119. package/dist/docs/tutorial/extension/snapshot.en.md +276 -0
  120. package/dist/docs/tutorial/extension/snapshot.zh.md +276 -0
  121. package/dist/docs/tutorial/get-started.en.md +501 -0
  122. package/dist/docs/tutorial/get-started.zh.md +139 -0
  123. package/dist/docs/tutorial/update.en.md +213 -0
  124. package/dist/docs/tutorial/update.zh.md +212 -0
  125. package/dist/index.css +3 -2
  126. package/dist/index.min.js +1 -1
  127. package/dist/index.min.js.map +1 -1
  128. package/es/LogicFlow.d.ts +9 -0
  129. package/es/LogicFlow.js +0 -1
  130. package/es/constant/index.d.ts +1 -1
  131. package/es/constant/index.js +1 -1
  132. package/es/constant/theme.d.ts +136 -0
  133. package/es/constant/theme.js +680 -0
  134. package/es/index.css +3 -2
  135. package/es/model/GraphModel.d.ts +10 -2
  136. package/es/model/GraphModel.js +48 -14
  137. package/es/model/TransformModel.js +9 -9
  138. package/es/model/edge/BaseEdgeModel.js +7 -2
  139. package/es/model/edge/PolylineEdgeModel.d.ts +7 -0
  140. package/es/model/edge/PolylineEdgeModel.js +136 -7
  141. package/es/model/node/BaseNodeModel.d.ts +12 -1
  142. package/es/model/node/BaseNodeModel.js +9 -2
  143. package/es/model/node/HtmlNodeModel.d.ts +12 -0
  144. package/es/model/node/HtmlNodeModel.js +19 -0
  145. package/es/model/node/PolygonNodeModel.js +3 -3
  146. package/es/options.d.ts +4 -2
  147. package/es/style/index.css +3 -2
  148. package/es/style/index.less +3 -2
  149. package/es/style/raw.d.ts +1 -1
  150. package/es/style/raw.js +1 -1
  151. package/es/tool/MultipleSelectTool.js +10 -5
  152. package/es/util/drag.js +0 -1
  153. package/es/util/edge.d.ts +40 -1
  154. package/es/util/edge.js +43 -9
  155. package/es/util/geometry.d.ts +8 -0
  156. package/es/util/geometry.js +79 -0
  157. package/es/util/theme.d.ts +2 -65
  158. package/es/util/theme.js +4 -281
  159. package/es/view/Anchor.d.ts +1 -0
  160. package/es/view/Anchor.js +24 -21
  161. package/es/view/Control.d.ts +5 -0
  162. package/es/view/Control.js +44 -57
  163. package/es/view/edge/BaseEdge.js +9 -0
  164. package/es/view/edge/PolylineEdge.js +13 -2
  165. package/es/view/node/BaseNode.d.ts +1 -0
  166. package/es/view/node/BaseNode.js +23 -11
  167. package/es/view/node/HtmlNode.js +2 -4
  168. package/es/view/overlay/CanvasOverlay.js +5 -2
  169. package/es/view/overlay/Grid.d.ts +12 -1
  170. package/es/view/overlay/Grid.js +85 -23
  171. package/es/view/overlay/OutlineOverlay.d.ts +1 -0
  172. package/es/view/overlay/OutlineOverlay.js +18 -17
  173. package/es/view/overlay/gridConfig.d.ts +46 -0
  174. package/es/view/overlay/gridConfig.js +99 -0
  175. package/es/view/shape/Polygon.d.ts +0 -7
  176. package/es/view/shape/Polygon.js +12 -43
  177. package/lib/LogicFlow.d.ts +9 -0
  178. package/lib/LogicFlow.js +0 -1
  179. package/lib/constant/index.d.ts +1 -1
  180. package/lib/constant/index.js +16 -2
  181. package/lib/constant/theme.d.ts +136 -0
  182. package/lib/constant/theme.js +683 -0
  183. package/lib/index.css +3 -2
  184. package/lib/model/GraphModel.d.ts +10 -2
  185. package/lib/model/GraphModel.js +49 -15
  186. package/lib/model/TransformModel.js +9 -9
  187. package/lib/model/edge/BaseEdgeModel.js +7 -2
  188. package/lib/model/edge/PolylineEdgeModel.d.ts +7 -0
  189. package/lib/model/edge/PolylineEdgeModel.js +136 -7
  190. package/lib/model/node/BaseNodeModel.d.ts +12 -1
  191. package/lib/model/node/BaseNodeModel.js +9 -2
  192. package/lib/model/node/HtmlNodeModel.d.ts +12 -0
  193. package/lib/model/node/HtmlNodeModel.js +19 -0
  194. package/lib/model/node/PolygonNodeModel.js +3 -3
  195. package/lib/options.d.ts +4 -2
  196. package/lib/style/index.css +3 -2
  197. package/lib/style/index.less +3 -2
  198. package/lib/style/raw.d.ts +1 -1
  199. package/lib/style/raw.js +1 -1
  200. package/lib/tool/MultipleSelectTool.js +10 -5
  201. package/lib/util/drag.js +0 -1
  202. package/lib/util/edge.d.ts +40 -1
  203. package/lib/util/edge.js +43 -9
  204. package/lib/util/geometry.d.ts +8 -0
  205. package/lib/util/geometry.js +81 -1
  206. package/lib/util/theme.d.ts +2 -65
  207. package/lib/util/theme.js +15 -292
  208. package/lib/view/Anchor.d.ts +1 -0
  209. package/lib/view/Anchor.js +24 -21
  210. package/lib/view/Control.d.ts +5 -0
  211. package/lib/view/Control.js +44 -57
  212. package/lib/view/edge/BaseEdge.js +9 -0
  213. package/lib/view/edge/PolylineEdge.js +13 -2
  214. package/lib/view/node/BaseNode.d.ts +1 -0
  215. package/lib/view/node/BaseNode.js +22 -10
  216. package/lib/view/node/HtmlNode.js +1 -3
  217. package/lib/view/overlay/CanvasOverlay.js +5 -2
  218. package/lib/view/overlay/Grid.d.ts +12 -1
  219. package/lib/view/overlay/Grid.js +83 -21
  220. package/lib/view/overlay/OutlineOverlay.d.ts +1 -0
  221. package/lib/view/overlay/OutlineOverlay.js +18 -17
  222. package/lib/view/overlay/gridConfig.d.ts +46 -0
  223. package/lib/view/overlay/gridConfig.js +104 -0
  224. package/lib/view/shape/Polygon.d.ts +0 -7
  225. package/lib/view/shape/Polygon.js +13 -45
  226. package/package.json +9 -2
  227. package/scripts/postinstall-ai-prompt.js +67 -0
  228. package/.turbo/turbo-build$colon$dev.log +0 -10
  229. package/.turbo/turbo-build.log +0 -33
  230. package/CHANGELOG.md +0 -1849
  231. package/__tests__/algorithm/egde.test.ts +0 -131
  232. package/__tests__/algorithm/index.test.ts +0 -74
  233. package/__tests__/algorithm/outline.test.ts +0 -43
  234. package/__tests__/bugs/1545-spec.test.ts +0 -42
  235. package/__tests__/event/event.test.ts +0 -22
  236. package/__tests__/history/history.test.ts +0 -28
  237. package/__tests__/logicflow.test.ts +0 -575
  238. package/__tests__/model/graphmodel.test.ts +0 -87
  239. package/__tests__/util/compatible.test.ts +0 -48
  240. package/__tests__/util/edge.test.ts +0 -224
  241. package/__tests__/util/geometry.test.ts +0 -14
  242. package/__tests__/util/graph.test.ts +0 -16
  243. package/__tests__/util/matrix.test.ts +0 -41
  244. package/__tests__/util/node.test.ts +0 -68
  245. package/__tests__/util/sampling.test.ts +0 -12
  246. package/__tests__/util/vector.test.ts +0 -50
  247. package/__tests__/util/zIndex.test.ts +0 -10
  248. package/src/LogicFlow.tsx +0 -2008
  249. package/src/algorithm/edge.ts +0 -67
  250. package/src/algorithm/index.ts +0 -70
  251. package/src/algorithm/outline.ts +0 -77
  252. package/src/algorithm/rotate.ts +0 -55
  253. package/src/common/drag.ts +0 -219
  254. package/src/common/history.ts +0 -108
  255. package/src/common/index.ts +0 -6
  256. package/src/common/keyboard.ts +0 -108
  257. package/src/common/matrix.ts +0 -122
  258. package/src/common/vector.ts +0 -93
  259. package/src/constant/index.ts +0 -179
  260. package/src/event/event.md +0 -66
  261. package/src/event/eventArgs.ts +0 -643
  262. package/src/event/eventEmitter.ts +0 -156
  263. package/src/history/index.ts +0 -119
  264. package/src/index.less +0 -1
  265. package/src/index.ts +0 -26
  266. package/src/keyboard/index.ts +0 -112
  267. package/src/keyboard/shortcut.ts +0 -200
  268. package/src/model/BaseModel.ts +0 -250
  269. package/src/model/EditConfigModel.ts +0 -334
  270. package/src/model/GraphModel.ts +0 -1788
  271. package/src/model/NestedTransformModel.ts +0 -121
  272. package/src/model/SnaplineModel.ts +0 -256
  273. package/src/model/TransformModel.ts +0 -258
  274. package/src/model/edge/BaseEdgeModel.ts +0 -777
  275. package/src/model/edge/BezierEdgeModel.ts +0 -197
  276. package/src/model/edge/LineEdgeModel.ts +0 -36
  277. package/src/model/edge/PolylineEdgeModel.ts +0 -672
  278. package/src/model/edge/index.ts +0 -4
  279. package/src/model/index.ts +0 -9
  280. package/src/model/node/BaseNodeModel.ts +0 -949
  281. package/src/model/node/CircleNodeModel.ts +0 -91
  282. package/src/model/node/DiamondNodeModel.ts +0 -132
  283. package/src/model/node/EllipseNodeModel.ts +0 -98
  284. package/src/model/node/HtmlNodeModel.ts +0 -50
  285. package/src/model/node/PolygonNodeModel.ts +0 -150
  286. package/src/model/node/RectNodeModel.ts +0 -69
  287. package/src/model/node/TextNodeModel.ts +0 -54
  288. package/src/model/node/index.ts +0 -8
  289. package/src/options.ts +0 -145
  290. package/src/style/index.less +0 -261
  291. package/src/style/raw.ts +0 -220
  292. package/src/tool/MultipleSelectTool.tsx +0 -132
  293. package/src/tool/TextEditTool.tsx +0 -193
  294. package/src/tool/index.ts +0 -101
  295. package/src/typings.d.ts +0 -5
  296. package/src/util/animation.ts +0 -29
  297. package/src/util/browser.ts +0 -4
  298. package/src/util/compatible.ts +0 -15
  299. package/src/util/drag.ts +0 -220
  300. package/src/util/edge.ts +0 -1060
  301. package/src/util/geometry.ts +0 -55
  302. package/src/util/graph.ts +0 -46
  303. package/src/util/index.ts +0 -17
  304. package/src/util/matrix.ts +0 -129
  305. package/src/util/mobx.ts +0 -23
  306. package/src/util/node.ts +0 -543
  307. package/src/util/raf.ts +0 -28
  308. package/src/util/resize.ts +0 -606
  309. package/src/util/sampling.ts +0 -85
  310. package/src/util/theme.ts +0 -375
  311. package/src/util/uuid.ts +0 -26
  312. package/src/util/vector.ts +0 -93
  313. package/src/util/zIndex.ts +0 -6
  314. package/src/view/Anchor.tsx +0 -445
  315. package/src/view/Control.tsx +0 -512
  316. package/src/view/Graph.tsx +0 -141
  317. package/src/view/Rotate.tsx +0 -113
  318. package/src/view/behavior/dnd.ts +0 -162
  319. package/src/view/behavior/index.ts +0 -2
  320. package/src/view/behavior/snapline.ts +0 -16
  321. package/src/view/edge/AdjustPoint.tsx +0 -425
  322. package/src/view/edge/Arrow.tsx +0 -54
  323. package/src/view/edge/BaseEdge.tsx +0 -650
  324. package/src/view/edge/BezierEdge.tsx +0 -101
  325. package/src/view/edge/LineEdge.tsx +0 -81
  326. package/src/view/edge/PolylineEdge.tsx +0 -299
  327. package/src/view/edge/index.ts +0 -6
  328. package/src/view/index.ts +0 -8
  329. package/src/view/node/BaseNode.tsx +0 -571
  330. package/src/view/node/CircleNode.tsx +0 -21
  331. package/src/view/node/DiamondNode.tsx +0 -24
  332. package/src/view/node/EllipseNode.tsx +0 -22
  333. package/src/view/node/HtmlNode.tsx +0 -95
  334. package/src/view/node/PolygonNode.tsx +0 -28
  335. package/src/view/node/RectNode.tsx +0 -30
  336. package/src/view/node/TextNode.tsx +0 -39
  337. package/src/view/node/index.ts +0 -8
  338. package/src/view/overlay/BackgroundOverlay.tsx +0 -34
  339. package/src/view/overlay/BezierAdjustOverlay.tsx +0 -150
  340. package/src/view/overlay/CanvasOverlay.tsx +0 -288
  341. package/src/view/overlay/Grid.tsx +0 -162
  342. package/src/view/overlay/ModificationOverlay.tsx +0 -31
  343. package/src/view/overlay/OutlineOverlay.tsx +0 -170
  344. package/src/view/overlay/SnaplineOverlay.tsx +0 -44
  345. package/src/view/overlay/ToolOverlay.tsx +0 -65
  346. package/src/view/overlay/getTransformHoc.tsx +0 -50
  347. package/src/view/overlay/index.ts +0 -8
  348. package/src/view/shape/Circle.tsx +0 -41
  349. package/src/view/shape/Ellipse.tsx +0 -42
  350. package/src/view/shape/Line.tsx +0 -39
  351. package/src/view/shape/Path.tsx +0 -22
  352. package/src/view/shape/Polygon.tsx +0 -91
  353. package/src/view/shape/Polyline.tsx +0 -31
  354. package/src/view/shape/Rect.tsx +0 -44
  355. package/src/view/shape/Text.tsx +0 -169
  356. package/src/view/shape/index.ts +0 -8
  357. package/src/view/text/BaseText.tsx +0 -134
  358. package/src/view/text/LineText.tsx +0 -168
  359. package/src/view/text/index.ts +0 -2
  360. package/stats.html +0 -4842
  361. package/tsconfig.json +0 -18
@@ -0,0 +1,338 @@
1
+ ---
2
+ nav: 指南
3
+ group:
4
+ title: 进阶
5
+ order: 2
6
+ title: 节点进阶
7
+ order: 0
8
+ toc: content
9
+ ---
10
+
11
+ 这页适合已经完成基础自定义节点、准备继续处理**连接规则、锚点、节点移动和框架节点渲染**的读者。
12
+
13
+ ::::info{title=阅读提示}
14
+ - 前置知识:建议先读 [节点](../basic/node.zh.md) 和 [实例与图数据](../basic/class.zh.md)
15
+ - 本页不解决插件选型和 API 全量参数查询;当你需要精确查属性或方法时,请转到 [`nodeModel`](../../api/runtime-model/nodeModel.zh.md)、[`graphModel`](../../api/runtime-model/graphModel.zh.md)、[`事件`](../../api/logicflow-instance/event.zh.md)
16
+ - 如果你是 React / Vue 项目,优先看本页中的导读,再继续进入 [React 自定义节点](react.zh.md) 或 [Vue 自定义节点](vue.zh.md)
17
+ ::::
18
+
19
+ ## 本页导读
20
+
21
+ 你可以按下面的目标跳读:
22
+
23
+ 1. 想限制节点怎么连:看“连接规则”
24
+ 2. 想控制节点能不能移动:看“移动”
25
+ 3. 想精细控制连线落点:看“锚点”
26
+ 4. 想把 React / Vue 组件渲染进节点:优先看独立的 React / Vue 页面
27
+ 5. 想从节点内部和外部通信:看“外部通信”
28
+
29
+ ## 连接规则
30
+
31
+ 在某些时候,我们可能需要控制边的连接方式,比如开始节点不能被其它节点连接、结束节点不能连接其他节点、用户节点后面必须是判断节点等,要想达到这种效果,我们需要为节点设置以下两个属性。
32
+
33
+ - `sourceRules` - 当节点作为边的起始节点(source)时的校验规则
34
+ - `targetRules` - 当节点作为边的目标节点(target)时的校验规则
35
+
36
+ 以正方形(square)为例,连边时我们希望它的下一节点只能是圆形节点(circle),那么我们应该给`square`
37
+ 添加作为`source`节点的校验规则。
38
+
39
+ ```tsx | pure
40
+ import { RectNode, RectNodeModel } from '@logicflow/core'
41
+
42
+ class SquareModel extends RectNodeModel {
43
+ initNodeData(data) {
44
+ super.initNodeData(data)
45
+
46
+ const circleOnlyAsTarget = {
47
+ message: '正方形节点下一个节点只能是圆形节点',
48
+ validate: (sourceNode, targetNode, sourceAnchor, targetAnchor) => {
49
+ return targetNode.type === 'circle'
50
+ },
51
+ }
52
+ this.sourceRules.push(circleOnlyAsTarget)
53
+ }
54
+ }
55
+ ```
56
+
57
+ 在上例中,我们为`model`的`sourceRules`
58
+ 属性添加了一条校验规则,校验规则是一个对象,我们需要为其提供`message`和`validate`属性。
59
+
60
+ `message`属性是当不满足校验规则时所抛出的错误信息,`validate`则是传入规则检验的回调函数。`validate`
61
+ 方法有两个参数,分别为边的起始节点(source)和目标节点(target),我们可以根据参数信息来决定是否通过校验,其返回值是一个布尔值。
62
+
63
+ :::warning{title=提示}
64
+ 当我们在面板上进行边操作的时候,LogicFlow 会校验每一条规则,只有**全部**通过后才能连接。
65
+ :::
66
+
67
+ 连边时,当鼠标松开后如果没有通过自定义规则(`validate`方法返回值为`false`),LogicFlow
68
+ 会对外抛出事件`connection:not-allowed`。
69
+
70
+ ```tsx | pure
71
+ lf.on('connection:not-allowed', (msg) => {
72
+ console.log(msg)
73
+ });
74
+ ```
75
+
76
+ 下面举个例子,通过**设置不同状态下节点的样式**来展示连接状态👇
77
+
78
+ 在节点model中,有个state属性,当节点连接规则校验不通过时,state属性值为5。我们可以通过这个属性来实现连线时节点的提示效果。
79
+
80
+ <code id="node-connect" src="../../../src/tutorial/advanced/node/connect"></code>
81
+
82
+ ## 移动
83
+
84
+ 有些时候,我们需要更加细粒度的控制节点什么时候可以移动,什么时候不可以移动,比如在实现分组插件时,需要控制分组节点子节点不允许移动出分组。和连线规则类似,我们可以给节点的`moveRules`
85
+ 添加规则函数。
86
+
87
+ ```tsx | pure
88
+ class MovableNodeModel extends RectNodeModel {
89
+ initNodeData(data) {
90
+ super.initNodeData(data);
91
+ this.moveRules.push((model, deltaX, deltaY) => {
92
+ // 需要处理的内容
93
+ });
94
+ }
95
+ }
96
+ ```
97
+
98
+ 在`graphModel`中支持添加全局移动规则,例如在移动A节点的时候,期望把B节点也一起移动了。
99
+
100
+ ```tsx | pure
101
+ lf.graphModel.addNodeMoveRules((model, deltaX, deltaY) => {
102
+ // 如果移动的是分组,那么分组的子节点也跟着移动。
103
+ if (model.isGroup && model.children) {
104
+ lf.graphModel.moveNodes(model.children, deltaX, deltaY, true);
105
+ }
106
+ return true;
107
+ });
108
+ ```
109
+
110
+ <code id="node-movable" src="../../../src/tutorial/advanced/node/movable"></code>
111
+
112
+ ## 锚点
113
+
114
+ 对于各种基础类型节点,我们都内置了默认锚点。LogicFlow支持通过重写获取锚点的方法来实现自定义节点的锚点。
115
+
116
+ <code id="node-sql" src="../../../src/tutorial/advanced/node/sql"></code>
117
+
118
+ 上面的示例中,我们自定义锚点的时候,不仅可以定义锚点的数量和位置,还可以给锚点加上任意属性。有了这些属性,我们可以再做很多额外的事情。例如,我们增加一个校验规则,只允许节点从右边连出,从左边连入;或者加个id,
119
+ 在获取数据的时候保存当前连线从那个锚点连接到那个锚点。
120
+
121
+ :::warning{title=注意}
122
+ 一定要确保锚点id唯一,否则可能会出现在连线规则校验不准确的问题。
123
+ 在实际开发中,存在隐藏锚点的需求,可以参考github
124
+ issue [如何隐藏锚点?](https://github.com/didi/LogicFlow/issues/454),可以查看code
125
+ sandbox [示例](https://codesandbox.io/s/reverent-haslett-dkb9n?file=/step_14_hideAnchor/index.js)
126
+ :::
127
+ ### customTargetAnchor(自定义连线落点锚点)
128
+
129
+ 当你从锚点拖拽创建连线,并在某个节点上释放鼠标时,LogicFlow 需要根据鼠标释放位置(position)决定“目标节点”最终连接到哪个锚点。
130
+
131
+ - 默认行为:连接到距离 position 最近的锚点
132
+ - 自定义方式:在初始化 LogicFlow 时传入 `customTargetAnchor`,作为全局规则优先返回你期望的锚点;若返回 `undefined`,则回退到默认行为
133
+
134
+
135
+ <code id="node-custom-target-anchor" src="../../../src/tutorial/advanced/node/customTargetAnchor"></code>
136
+
137
+ ## 文本
138
+
139
+ LogicFlow 支持自定义节点文本的外观和编辑状态。参考 [nodeModel API](../../api/runtime-model/nodeModel.zh.md)
140
+ 中的`textObject`
141
+
142
+ ```tsx | pure
143
+ class CustomNodeModel extends RectNodeModel {
144
+ initNodeData(data) {
145
+ super.initNodeData(data)
146
+ this.text.draggable = false; // 不允许文本被拖动
147
+ this.text.editable = false; // 不允许文本被编辑
148
+ }
149
+
150
+ getTextStyle() {
151
+ const style = super.getTextStyle();
152
+ style.fontSize = 16;
153
+ style.color = 'red';
154
+ return style;
155
+ }
156
+ }
157
+ ```
158
+
159
+ ## HTML 节点
160
+
161
+ LogicFlow内置了基础的HTML节点和其他基础节点不一样,我们可以利用LogicFlow的自定义机制,实现各种形态的HTML节点,而且HTML节点内部可以使用任意框架进行渲染。
162
+
163
+ 下面是HTML节点的示例👇
164
+
165
+ <code id="node-html-node" src="../../../src/tutorial/advanced/node/htmlNode/index"></code>
166
+
167
+ ## React 节点
168
+
169
+ 因为自定义html节点对外暴露的是一个DOM节点,所以你可以使用框架现有的能力来渲染节点。在react中,我们利用`reactDom`
170
+ 的`render`方法,将react组件渲染到dom节点上。
171
+
172
+ <code id="node-react-node" src="../../../src/tutorial/advanced/node/reactNode/index"></code>
173
+
174
+ ## Vue 节点
175
+
176
+ <details> <summary>代码展开</summary>
177
+
178
+ ```tsx | pure
179
+ import { HtmlNode, HtmlNodeModel } from "@logicflow/core";
180
+ import { createApp, ref, h } from 'vue';
181
+ import VueNode from './VueNode.vue';
182
+
183
+ class VueHtmlNode extends HtmlNode {
184
+ constructor(props) {
185
+ super(props)
186
+ this.isMounted = false
187
+ this.r = h(VueNode, {
188
+ properties: props.model.getProperties(),
189
+ text: props.model.inputData,
190
+ })
191
+ this.app = createApp({
192
+ render: () => this.r
193
+ })
194
+ }
195
+
196
+ setHtml(rootEl) {
197
+ if (!this.isMounted) {
198
+ this.isMounted = true
199
+ const node = document.createElement('div')
200
+ rootEl.appendChild(node)
201
+ this.app.mount(node)
202
+ } else {
203
+ this.r.component.props.properties = this.props.model.getProperties()
204
+ }
205
+ }
206
+ }
207
+
208
+ class VueHtmlNodeModel extends HtmlNodeModel {
209
+ setAttributes() {
210
+ this.width = 300;
211
+ this.height = 100;
212
+ this.text.editable = false;
213
+ this.inputData = this.text.value
214
+ }
215
+
216
+ getOutlineStyle() {
217
+ const style = super.getOutlineStyle();
218
+ style.stroke = 'none';
219
+ style.hover.stroke = 'none';
220
+ return style;
221
+ }
222
+ }
223
+
224
+ export default {
225
+ type: 'vue-html',
226
+ model: VueHtmlNodeModel,
227
+ view: VueHtmlNode
228
+ }
229
+ ```
230
+
231
+ </details>
232
+
233
+ ## 外部通信
234
+
235
+ 当需要自定义节点与外部交互时,比如点击自定义 HTML 节点上的按钮,触发外部方法,可以用 LogicFlow
236
+ 的自定义事件机制来实现。
237
+
238
+ ```tsx | pure
239
+ // view.js
240
+ class VueHtmlNode extends HtmlNode {
241
+ constructor(props) {
242
+ super(props);
243
+ this.isMounted = false;
244
+ this.r = h(VueNode, {
245
+ properties: props.model.getProperties(),
246
+ text: props.model.inputData,
247
+ onBtnClick: (i) => {
248
+ props.graphModel.eventCenter.emit("custom:onBtnClick", i);
249
+ },
250
+ });
251
+ this.app = createApp({
252
+ render: () => this.r,
253
+ });
254
+ }
255
+
256
+ setHtml(rootEl) {
257
+ if (!this.isMounted) {
258
+ this.isMounted = true;
259
+ const node = document.createElement("div");
260
+ rootEl.appendChild(node);
261
+ this.app.mount(node);
262
+ } else {
263
+ this.r.component.props.properties = this.props.model.getProperties();
264
+ }
265
+ }
266
+
267
+ getText() {
268
+ return null;
269
+ }
270
+ }
271
+
272
+ // flow.js
273
+ const lf = new LogicFlow();
274
+ lf.render();
275
+ lf.on("custom:onBtnClick", () => {});
276
+ ```
277
+
278
+ :::success{title=提示}
279
+ 如果期望从外部传递一个方案给自定义节点使用。由于自定义节点中无法直接访问到`lf`实例,所以不支持直接给
280
+ lf 绑定一个方法。但是自定义节点可以拿到整个图的 model 对象,也就是`graphModel`
281
+ ,所以可以把这个方法绑定到`graphModel`上。另外`lf`内置的方法`graphModel`
282
+ 中基本都有,所以在开发自定义节点的时候可以使用`graphModel`获取流程图相关数据即可。
283
+ :::
284
+
285
+ ## 更新
286
+
287
+ HTML节点目前通过修改properties触发节点更新。
288
+
289
+ ```tsx | pure
290
+ /**
291
+ * @overridable 支持重写
292
+ * 和react的shouldComponentUpdate类似,都是为了避免触发不必要的render.
293
+ * 但是这里不一样的地方在于,setHtml方法,我们只在properties发生变化了后再触发。
294
+ * 而x,y等这些坐标相关的方法发生了变化,不会再重新触发setHtml.
295
+ */
296
+ class CustomComponent extends Component {
297
+ // ...
298
+ shouldUpdate() {
299
+ if (this.preProperties && this.preProperties === this.currentProperties) return
300
+ this.preProperties = this.currentProperties
301
+ return true
302
+ }
303
+
304
+ componentDidMount() {
305
+ if (this.shouldUpdate()) {
306
+ this.setHtml(this.rootEl)
307
+ }
308
+ }
309
+
310
+ componentDidUpdate() {
311
+ if (this.shouldUpdate()) {
312
+ this.setHtml(this.rootEl)
313
+ }
314
+ }
315
+
316
+ //..
317
+ }
318
+ ```
319
+
320
+ 如果期望其他内容的修改可以触发节点更新,可以重写shouldUpdate(相关issue: [#1208](https://github.com/didi/LogicFlow/issues/1208))
321
+
322
+ ```tsx | pure
323
+ class CustomComponent extends Component {
324
+
325
+ shouldUpdate() {
326
+ if (this.preProperties &&
327
+ this.preProperties === this.currentProperties &&
328
+ this.preText === this.props.model.text.value
329
+ ) {
330
+ return
331
+ }
332
+ this.preProperties = this.currentProperties
333
+ this.preText = this.props.model.text.value
334
+ return true;
335
+ }
336
+ }
337
+ ```
338
+
@@ -0,0 +1,106 @@
1
+ ---
2
+ nav: Guide
3
+ group:
4
+ title: Intermediate
5
+ order: 2
6
+ title: React Node Registry
7
+ order: 6
8
+ toc: content
9
+ tag: New
10
+ ---
11
+
12
+ :::info{title=New-Features-Introduction}
13
+ - How to use React components to register node content
14
+ - How to synchronize node content updates when properties change
15
+ :::
16
+
17
+ ## Rendering React Components as Node Content
18
+ Although we provide the capability to customize nodes by extending `HTMLNode`, user feedback indicates that this approach is not very intuitive and may cause performance issues due to improper destruction timing.
19
+
20
+ Therefore, we offer a separate package `@logicflow/react-node-registry` to customize nodes in a more intuitive way by registering nodes through React components. This allows you to use the rich component libraries already included in the system or to quickly develop custom node content using React's convenient development features.
21
+
22
+ ```tsx | pure
23
+ import { register, ReactNodeProps } from '@logicflow/react-node-registry'
24
+
25
+ // Custom React component
26
+ const NodeComponent: FC<ReactNodeProps> = ({ node }) => {
27
+ const data = node.getData()
28
+ if (!data.properties) data.properties = {}
29
+
30
+ return (
31
+ <div className="react-algo-node">
32
+ <img src={require('@/assets/didi.png')} alt="DiDi" />
33
+ <span>{data.properties.name as string}</span>
34
+ </div>
35
+ )
36
+ }
37
+
38
+ // Initialize LogicFlow instance
39
+ const lf = new LogicFlow({
40
+ // ...options
41
+ })
42
+
43
+ // Register custom node
44
+ register({
45
+ type: 'custom-react-node',
46
+ component: NodeComponent,
47
+ }, lf)
48
+
49
+ // Render custom node
50
+ const node = lf.addNode({
51
+ id: 'react-node-1',
52
+ type: 'custom-react-node',
53
+ x: 80,
54
+ y: 80,
55
+ properties: {
56
+ name: 'Today's Trip',
57
+ width: 120,
58
+ height: 28,
59
+ },
60
+ })
61
+ console.log('node --->>>', node)
62
+ ```
63
+ <code id="react-basic" src="@/src/tutorial/advanced/react/index.tsx"></code>
64
+
65
+ ## Updating Nodes
66
+ Similar to `HTMLNode`, when users update node properties using `setProperties` or `setProperty`, the node content is automatically updated.
67
+
68
+ ```tsx | pure
69
+ const node1 = lf.addNode({
70
+ id: 'react-node-1',
71
+ type: 'custom-react-node',
72
+ x: 80,
73
+ y: 80,
74
+ properties: {
75
+ name: 'Today's Trip',
76
+ width: 120,
77
+ height: 28,
78
+ },
79
+ })
80
+
81
+ const update = () => {
82
+ node1.setProperty('name', `Today's Trip ${(this.count += 1)}`)
83
+ this.timer = setTimeout(update, 1000)
84
+ }
85
+
86
+ update()
87
+
88
+ // Remember to clear the timer in componentWillUnmount
89
+ if (this.timer) {
90
+ clearTimeout(this.timer)
91
+ }
92
+ ```
93
+
94
+ ## Portal Mode
95
+ One drawback of the React component rendering method mentioned above is that the component is rendered into the node's DOM using the following method:
96
+
97
+ ```tsx | pure
98
+ import { createRoot, Root } from 'react-dom/client'
99
+
100
+ const root = createRoot(container)
101
+ root.render(elem)
102
+ ```
103
+
104
+ As a result, the React component is no longer part of the normal rendering document tree. This means it cannot access external Context content. If you have such use cases, you can use the `Portal` mode to render React components.
105
+
106
+ <code id="react-portal" src="@/src/tutorial/advanced/react/Portal.tsx"></code>
@@ -0,0 +1,114 @@
1
+ ---
2
+ nav: 指南
3
+ group:
4
+ title: 进阶
5
+ order: 2
6
+ title: React 节点
7
+ order: 6
8
+ toc: content
9
+ tag: 新特性
10
+ ---
11
+
12
+ :::info{title=我们带来了新特性,本节内容主要介绍}
13
+ - 如何使用 React 组件来注册节点内容
14
+ - properties 更新后如何同步更新节点内容
15
+ :::
16
+
17
+ ::::info{title=阅读提示}
18
+ - 适合已经理解 [节点](../basic/node.zh.md) 的 React 项目用户
19
+ - 当前推荐优先使用 `@logicflow/react-node-registry`
20
+ - 本页不展开连接规则、锚点和边能力;这些内容请回到 [进阶节点](node.zh.md)
21
+ - 相关 API:[`nodeModel`](../../api/runtime-model/nodeModel.zh.md)、[`graphModel`](../../api/runtime-model/graphModel.zh.md)、[`事件`](../../api/logicflow-instance/event.zh.md)
22
+ ::::
23
+
24
+ ## 渲染 React 组件为节点内容
25
+ 我们虽然提供了通过继承 HTMLNode 自定义节点的能力,但从用户反馈来看,这种方式并不够直观且有可能因为销毁时机不对而出现性能问题。
26
+
27
+ 因此我们提供了一个独立的包 `@logicflow/react-node-registry`,以一种更直观的方式来自定义节点,即通过 React 组件来注册节点。
28
+ 它既可以直接使用系统中已引入的丰富的组件库,也可以使用 React 快捷的开发方式来自定义节点内容。
29
+
30
+ ```tsx | pure
31
+ import { register, ReactNodeProps } from '@logicflow/react-node-registry'
32
+
33
+ // 自定义 React 组件
34
+ const NodeComponent: FC<ReactNodeProps> = ({ node }) => {
35
+ const data = node.getData()
36
+ if (!data.properties) data.properties = {}
37
+
38
+ return (
39
+ <div className="react-algo-node">
40
+ <img src={require('@/assets/didi.png')} alt="滴滴出行" />
41
+ <span>{data.properties.name as string}</span>
42
+ </div>
43
+ )
44
+ }
45
+
46
+ // 初始化 LogicFlow 实例
47
+ const lf = new LogicFlow({
48
+ // ...options
49
+ })
50
+
51
+ // 注册自定义节点
52
+ register({
53
+ type: 'custom-react-node',
54
+ component: NodeComponent,
55
+ }, lf)
56
+
57
+ // 渲染自定义节点
58
+ const node = lf.addNode({
59
+ id: 'react-node-1',
60
+ type: 'custom-react-node',
61
+ x: 80,
62
+ y: 80,
63
+ properties: {
64
+ name: '今日出行',
65
+ width: 120,
66
+ height: 28,
67
+ },
68
+ })
69
+ console.log('node --->>>', node)
70
+ ```
71
+ <code id="react-basic" src="@/src/tutorial/advanced/react/index.tsx"></code>
72
+
73
+ ## 更新节点
74
+ 跟 `HTMLNode` 一样,当用户通过 `setProperties` 或 `setProperty` 等更新节点 properties 时,我们会自动更新节点内容。
75
+
76
+ ```tsx | pure
77
+ const node1 = lf.addNode({
78
+ id: 'react-node-1',
79
+ type: 'custom-react-node',
80
+ x: 80,
81
+ y: 80,
82
+ properties: {
83
+ name: '今日出行',
84
+ width: 120,
85
+ height: 28,
86
+ },
87
+ })
88
+
89
+ const update = () => {
90
+ node1.setProperty('name', `今日出行 ${(this.count += 1)}`)
91
+ this.timer = setTimeout(update, 1000)
92
+ }
93
+
94
+ update()
95
+
96
+ // 记得在 componentWillUnmount 中清除定时器
97
+ if (this.timer) {
98
+ clearTimeout(this.timer)
99
+ }
100
+ ```
101
+
102
+ ## Portal 方式
103
+ 上面的 React 组件渲染方式有一个缺点,因为内部是通过以下方式将组件渲染到节点的 DOM 中。
104
+
105
+ ```tsx | pure
106
+ import { createRoot, Root } from 'react-dom/client'
107
+
108
+ const root = createRoot(container)
109
+ root.render(elem)
110
+ ```
111
+
112
+ 可以发现,React 组件已经不处于正常的渲染文档树中。所以它内部无法获取外部 Context 内容。如果有这种应用场景,可以使用 `Portal` 模式来渲染 React 组件。
113
+ <code id="react-portal" src="@/src/tutorial/advanced/react/Portal.tsx"></code>
114
+
@@ -0,0 +1,75 @@
1
+ ---
2
+ nav: Guide
3
+ group:
4
+ title: Intermediate
5
+ order: 2
6
+ title: Edit Config Settings
7
+ order: 5
8
+ toc: content
9
+ ---
10
+
11
+ LogicFlow provides a very large number of configurations that control how diagrams are edited,
12
+ see [editConfigModel](../../api/runtime-model/graphModel.en.md#editconfigmodel) for details.
13
+
14
+ ## Initialization
15
+
16
+ LogicFlow supports passing in many configuration parameters at initialization time, and the
17
+ configuration for graph editing can also be passed in at initialization time.
18
+
19
+ ```tsx | pure
20
+ const lf = new LogicFlow({
21
+ stopZoomGraph: true, // 禁止缩放
22
+ stopScrollGraph: true, // 禁止鼠标滚动移动画布
23
+ });
24
+ ```
25
+
26
+ ## Updating the way the graph is edited
27
+
28
+ ```tsx | pure
29
+ lf.updateEditConfig({
30
+ stopZoomGraph: false,
31
+ stopScrollGraph: false,
32
+ })
33
+ ```
34
+
35
+ ## Silent Mode
36
+
37
+ The silent mode of the canvas can be simply understood as a "read-only" mode, in which the nodes and
38
+ edges of the canvas cannot be moved, no text modification is possible, and there are no anchor
39
+ points.
40
+
41
+ :::info{title=tip}
42
+ Silent mode is just a shortcut to LogicFlow's built-in flowchart editing controls, a collection of
43
+ multiple editing configurations that you can use to edit properties if the effect isn't satisfying.
44
+ :::
45
+
46
+ ```tsx | pure
47
+ const lf = new LogicFlow({
48
+ isSilentMode: true,
49
+ });
50
+ ```
51
+
52
+ Silent mode is equivalent to:
53
+
54
+ ```tsx | pure
55
+ const SilentConfig = {
56
+ stopZoomGraph: false,
57
+ stopScrollGraph: false,
58
+ stopMoveGraph: false,
59
+ adjustEdge: false,
60
+ adjustEdgeStartAndEnd: false,
61
+ adjustNodePosition: false,
62
+ hideAnchors: true,
63
+ nodeSelectedOutline: true,
64
+ nodeTextEdit: false,
65
+ edgeTextEdit: false,
66
+ nodeTextDraggable: false,
67
+ edgeTextDraggable: false,
68
+ };
69
+
70
+ const lf = new LogicFlow({
71
+ ...SilentConfig
72
+ });
73
+ ```
74
+
75
+ <a href="https://codesandbox.io/embed/pedantic-microservice-db76o?fontsize=14&hidenavigation=1&theme=dark&view=preview"> Go to CodeSandbox for examples </a>
@@ -0,0 +1,71 @@
1
+ ---
2
+ nav: 指南
3
+ group:
4
+ title: 进阶
5
+ order: 2
6
+ title: 图编辑配置项
7
+ order: 5
8
+ toc: content
9
+ ---
10
+
11
+ LogicFlow提供了非常多的控制图如何编辑的配置,详情见[editConfigModel](../../api/runtime-model/graphModel.zh.md#editconfigmodel)。
12
+
13
+ ## 初始化
14
+
15
+ LogicFlow 支持在初始化的时候传入很多配置参数,图编辑的配置也可以在初始化的时候传入。
16
+
17
+ ```tsx | pure
18
+ const lf = new LogicFlow({
19
+ stopZoomGraph: true, // 禁止缩放
20
+ stopScrollGraph: true, // 禁止鼠标滚动移动画布
21
+ });
22
+ ```
23
+
24
+ ## 更新图编辑方式
25
+
26
+ ```tsx | pure
27
+ lf.updateEditConfig({
28
+ stopZoomGraph: false,
29
+ stopScrollGraph: false,
30
+ });
31
+ ```
32
+
33
+ ## 静默模式
34
+
35
+ 画布的静默模式可以简单理解为“只读”模式,这种模式下,画布中的节点和边不可移动,不可进行文案修改,没有锚点。
36
+
37
+ :::info{title=提示}
38
+ 静默模式只是 LogicFlow 内置的流程图编辑控制的一种快捷方式, 是多个编辑配置的集合,如果效果不满足,你可以使用这些属性编辑。
39
+ :::
40
+
41
+ ```tsx | pure
42
+ // 开启静默模式
43
+ const lf = new LogicFlow({
44
+ isSilentMode: true,
45
+ });
46
+ ```
47
+
48
+ 静默模式等同于:
49
+
50
+ ```tsx | pure
51
+ const SilentConfig = {
52
+ stopZoomGraph: false,
53
+ stopScrollGraph: false,
54
+ stopMoveGraph: false,
55
+ adjustEdge: false,
56
+ adjustEdgeStartAndEnd: false,
57
+ adjustNodePosition: false,
58
+ hideAnchors: true,
59
+ nodeSelectedOutline: true,
60
+ nodeTextEdit: false,
61
+ edgeTextEdit: false,
62
+ nodeTextDraggable: false,
63
+ edgeTextDraggable: false,
64
+ };
65
+ // 开启静默模式
66
+ const lf = new LogicFlow({
67
+ ...SilentConfig
68
+ });
69
+ ```
70
+
71
+ <a href="https://codesandbox.io/embed/pedantic-microservice-db76o?fontsize=14&hidenavigation=1&theme=dark&view=preview"> 去 CodeSandbox 查看示例</a>