@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,217 @@
1
+ ---
2
+ nav: Guide
3
+ group:
4
+ title: Plug-in functionality
5
+ order: 3
6
+ title: Group
7
+ order: 15
8
+ toc: content
9
+ tag: Deprecated
10
+ ---
11
+
12
+ LogicFlow supports grouping. Grouping is a custom node built-in in LogicFlow, so developers can
13
+ customize more scenarios based on grouping by referring to the custom node.
14
+
15
+ ## Default Grouping
16
+
17
+ ```tsx | pure
18
+ import LogicFlow from '@logicflow/core'
19
+ import '@logicflow/core/lib/style/index.css'
20
+ import { Group } from '@logicflow/extension'
21
+ import '@logicflow/extension/lib/style/index.css'
22
+
23
+ const lf = new LogicFlow({
24
+ // ...
25
+ plugins: [Group],
26
+ })
27
+ lf.render({
28
+ nodes: [
29
+ {
30
+ type: 'group',
31
+ x: 300,
32
+ y: 300,
33
+ },
34
+ ],
35
+ })
36
+ ```
37
+
38
+ ## Data format of group
39
+
40
+ A `group` is a special kind of node for LogicFlow, so its data format is still basically the same as
41
+ that of a node. However, a `group` node has an additional `children` attribute to store its child
42
+ ids.
43
+
44
+ ```tsx | pure
45
+ lf.render({
46
+ nodes: [
47
+ {
48
+ type: "group",
49
+ x: 400,
50
+ y: 400,
51
+ children: ["rect_2"],
52
+ },
53
+ {
54
+ id: "rect_2",
55
+ type: "circle",
56
+ x: 400,
57
+ y: 400,
58
+ },
59
+ ],
60
+ });
61
+ ```
62
+
63
+ ## Custom Grouping
64
+
65
+ In practice, we recommend that, as with custom nodes, developers customize groups based on their own
66
+ business, and then give the groups a name that matches their business. For example, for a subgroup
67
+ in bpmn, name it `subProcess` and then customize the style of the grouping node.
68
+
69
+ ```tsx | pure
70
+ import { GroupNode } from "@logicflow/extension";
71
+
72
+ class MyGroup extends GroupNode.view {
73
+ }
74
+
75
+ class MyGroupModel extends GroupNode.model {
76
+ getNodeStyle() {
77
+ const style = super.getNodeStyle();
78
+ style.stroke = "#AEAFAE";
79
+ style.strokeDasharray = "3 3";
80
+ style.strokeWidth = 1;
81
+ return style;
82
+ }
83
+ }
84
+
85
+ lf.register({
86
+ type: "my-group",
87
+ model: MyGroupModel,
88
+ view: MyGroup,
89
+ });
90
+ ```
91
+
92
+ ## Attributes and methods of groupModel
93
+
94
+ In addition to the properties of the node itself, there are some special properties of the group. We
95
+ can control these properties to achieve various effects of grouping when customizing. The properties
96
+ and methods of the node itself are shown in [nodeModel](../../api/runtime-model/nodeModel.en.md)。
97
+
98
+ ### State Properties
99
+
100
+ | Name | Type | Description |
101
+ |:-------------|:--------|:---------------------------------------------------------------------------------------------------|
102
+ | isRestrict | boolean | Whether or not to restrict grouped child nodes from being dragged out of the group, default false. |
103
+ | resizable | boolean | Whether the group supports manual resizing, default false. |
104
+ | foldable | boolean | If or not the group displays the expand and collapse buttons, default false. |
105
+ | width | number | Grouping width |
106
+ | height | number | Grouping height |
107
+ | foldedWidth | number | Width after grouping and folding |
108
+ | foldedHeight | number | Height after folding in groups |
109
+ | isFolded | boolean | Read-only, indicates whether the grouping is collapsed or not. |
110
+ | isGroup | boolean | Read-only, always true, used to identify `model` as a `group`. |
111
+
112
+ Attributes of a group are set in the same way as nodes, either in the `initNodeData`
113
+ or `setAttributes` methods of the `groupModel`.
114
+
115
+ ```tsx | pure
116
+ class MyGroupModel extends GroupNode.model {
117
+ initNodeData(data) {
118
+ super.initNodeData(data);
119
+ this.isRestrict = true;
120
+ this.resizable = true;
121
+ this.foldable = true;
122
+ this.width = 500;
123
+ this.height = 300;
124
+ this.foldedWidth = 50;
125
+ this.foldedHeight = 50;
126
+ }
127
+ }
128
+ ```
129
+
130
+ ### addChild
131
+
132
+ Sets a node as a child of the grouping. Note that this method will only add relationships, it will
133
+ not automatically move the node inside the grouping.
134
+
135
+ ```tsx | pure
136
+ const groupModel = lf.getNodeModelById("group_id");
137
+ const node = lf.addNode({
138
+ type: "rect",
139
+ x: groupModel.x,
140
+ y: groupModel.y,
141
+ });
142
+ groupModel.addChild(node.id);
143
+ ```
144
+
145
+ ### removeChild
146
+
147
+ Removes a child node from the grouping.
148
+
149
+ ```tsx | pure
150
+ const groupModel = lf.getNodeModelById("group_id");
151
+ groupModel.removeChild("node_id_1");
152
+ ```
153
+
154
+ ### foldGroup
155
+
156
+ Group up, `true` means group up, false means group down.
157
+
158
+ ```tsx | pure
159
+ const groupModel = lf.getNodeModelById("group_id");
160
+ groupModel.foldGroup(true);
161
+ ```
162
+
163
+ ### isAllowAppendIn(nodeData)
164
+
165
+ Checks if incoming nodes are allowed to be added to this group, by default all nodes are allowed.
166
+
167
+ ```tsx | pure
168
+ class MyGroupModel extends GroupNode.model {
169
+ isAllowAppendIn(nodeData) {
170
+ // Set to only allow custom-rect nodes to be added to this group.
171
+ return nodeData.type === "custom-rect";
172
+ }
173
+ }
174
+ ```
175
+
176
+ :::info
177
+ When a node is not allowed to be added to a group, the node will still show up where the user put
178
+ it, it's just that the node isn't belong to the group. If you want the added node to be removed,
179
+ you can listen to the `group:not-allowed` event and then manually remove the node.
180
+ :::
181
+
182
+ ### getAddableOutlineStyle
183
+
184
+ Sets the alert effect style for group highlighting when dragging a node onto a group.
185
+
186
+ ```tsx | pure
187
+ class MyGroupModel extends GroupNode.model {
188
+ getAddableOutlineStyle() {
189
+ const style = super.getAddableOutlineStyle();
190
+ style.stroke = "#AEAFAE";
191
+ style.strokeDasharray = "3 3";
192
+ return style;
193
+ }
194
+ }
195
+ ```
196
+
197
+ :::info
198
+ How to prevent a node from connecting to a grouping?
199
+
200
+ Grouping is a special kind of node, so it is still possible to disallow nodes and grouping to be
201
+ directly connected by [custom connection rule check](../advanced/node.en.md#connection-rules). But
202
+ please don't set the number of anchors of the grouping to 0, because when the grouping is collapsed,
203
+ the relationship between the nodes inside the grouping and the nodes outside the grouping will be
204
+ indicated by the anchors of the grouping being connected to the outside nodes.
205
+ :::
206
+
207
+ ## example
208
+
209
+ <a href="https://codesandbox.io/embed/bold-moore-vgvpf?fontsize=14&hidenavigation=1&theme=dark&view=preview" target="_blank"> Go to CodeSandbox for examples </a>
210
+
211
+ :::info
212
+ About swimlanes.
213
+
214
+ The grouping function is not a swim lane and needs to be implemented by developers on the basis of
215
+ grouping. LogicFlow will provide full-featured Bpmn support to support BPMN swimlane. You are
216
+ welcome to PR us if you have implemented it yourself.
217
+ :::
@@ -0,0 +1,209 @@
1
+ ---
2
+ nav: 指南
3
+ group:
4
+ title: 插件功能
5
+ order: 3
6
+ title: 分组 (Group)
7
+ order: 15
8
+ toc: content
9
+ tag: 废弃
10
+ ---
11
+
12
+ ::::warning{title=废弃说明}
13
+ `Group` 已进入废弃状态,不再推荐用于新项目。
14
+
15
+ 如果你正在新建或维护分组能力,请优先使用 [动态分组(Dynamic Group)](./dynamic-group.zh.md)。
16
+ ::::
17
+
18
+ 保留本页仅用于历史项目兼容与迁移参考。
19
+
20
+ ## 默认分组
21
+
22
+ ```tsx | pure
23
+ import LogicFlow from '@logicflow/core'
24
+ import '@logicflow/core/es/style/index.css'
25
+ import { Group } from '@logicflow/extension'
26
+ import '@logicflow/extension/es/style/index.css'
27
+
28
+ const lf = new LogicFlow({
29
+ // ...
30
+ plugins: [Group],
31
+ })
32
+ lf.render({
33
+ nodes: [
34
+ {
35
+ type: 'group',
36
+ x: 300,
37
+ y: 300,
38
+ },
39
+ ],
40
+ })
41
+ ```
42
+
43
+ ## group 的数据格式
44
+
45
+ `group`对 LogicFlow
46
+ 来说是一种特殊的节点,所以其数据格式仍然和节点基本一致。但是相对于普通的节点,`group`
47
+ 节点多了一个`children`属性,用来存储其子节点 Id.
48
+
49
+ ```tsx | pure
50
+ lf.render({
51
+ nodes: [
52
+ {
53
+ type: "group",
54
+ x: 400,
55
+ y: 400,
56
+ children: ["rect_2"],
57
+ },
58
+ {
59
+ id: "rect_2",
60
+ type: "circle",
61
+ x: 400,
62
+ y: 400,
63
+ },
64
+ ],
65
+ });
66
+ ```
67
+
68
+ ## 自定义分组
69
+
70
+ 在实际业务中,我们建议和自定义节点一样,开发者基于自己的业务自定义分组,然后给分组取个符合自己业务的名字。例如在
71
+ bpmn 中的子分组,取名叫做`subProcess`,然后自定义分组节点的样式。
72
+
73
+ ```tsx | pure
74
+ import { GroupNode } from "@logicflow/extension";
75
+
76
+ class MyGroup extends GroupNode.view {
77
+ }
78
+
79
+ class MyGroupModel extends GroupNode.model {
80
+ getNodeStyle() {
81
+ const style = super.getNodeStyle();
82
+ style.stroke = "#AEAFAE";
83
+ style.strokeDasharray = "3 3";
84
+ style.strokeWidth = 1;
85
+ return style;
86
+ }
87
+ }
88
+
89
+ lf.register({
90
+ type: "my-group",
91
+ model: MyGroupModel,
92
+ view: MyGroup,
93
+ });
94
+ ```
95
+
96
+ ## groupModel 的属性和方法
97
+
98
+ 分组节点除了节点本身的属性以外,还有一些属于分组的特殊属性。我们可以在自定义的时候,控制这些属性来实现各种效果的分组。节点本身的属性和方法见 [nodeModel](../../api/runtime-model/nodeModel.zh.md)。
99
+
100
+ ### 状态属性
101
+
102
+ | 名称 | 类型 | 描述 |
103
+ |:-------------|:--------|:----------------------------------|
104
+ | isRestrict | boolean | 是否限制分组子节点拖出分组,默认 false |
105
+ | resizable | boolean | 分组是否支持手动调整大小,默认 false |
106
+ | foldable | boolean | 分组是否显示展开收起按钮,默认 false |
107
+ | width | number | 分组宽度 |
108
+ | height | number | 分组高度 |
109
+ | foldedWidth | number | 分组折叠后的宽度 |
110
+ | foldedHeight | number | 分组折叠后的高度 |
111
+ | isFolded | boolean | 只读,表示分组是否被折叠。 |
112
+ | isGroup | boolean | 只读,永远为 true, 用于识别`model`为`group`。 |
113
+
114
+ group 的属性设置方式和节点一样,可以在`groupModel`的`initNodeData`或`setAttributes`方法中设置。
115
+
116
+ ```tsx | pure
117
+ class MyGroupModel extends GroupNode.model {
118
+ initNodeData(data) {
119
+ super.initNodeData(data);
120
+ this.isRestrict = true;
121
+ this.resizable = true;
122
+ this.foldable = true;
123
+ this.width = 500;
124
+ this.height = 300;
125
+ this.foldedWidth = 50;
126
+ this.foldedHeight = 50;
127
+ }
128
+ }
129
+ ```
130
+
131
+ ### addChild
132
+
133
+ 将某个节点设置为分组的子节点。注意,此方法只会添加关系,不会自动将节点移动到分组里面。
134
+
135
+ ```tsx | pure
136
+ const groupModel = lf.getNodeModelById("group_id");
137
+ const node = lf.addNode({
138
+ type: "rect",
139
+ x: groupModel.x,
140
+ y: groupModel.y,
141
+ });
142
+ groupModel.addChild(node.id);
143
+ ```
144
+
145
+ ### removeChild
146
+
147
+ 从分组中移除某个子节点。
148
+
149
+ ```tsx | pure
150
+ const groupModel = lf.getNodeModelById("group_id");
151
+ groupModel.removeChild("node_id_1");
152
+ ```
153
+
154
+ ### foldGroup
155
+
156
+ 收起分组, 参数为`true`表示收起分组、false 表示展开分组
157
+
158
+ ```tsx | pure
159
+ const groupModel = lf.getNodeModelById("group_id");
160
+ groupModel.foldGroup(true);
161
+ ```
162
+
163
+ ### isAllowAppendIn(nodeData)
164
+
165
+ 校验是否允许传入节点添加到此分组中,默认所有的节点都可以。
166
+
167
+ ```tsx | pure
168
+ class MyGroupModel extends GroupNode.model {
169
+ isAllowAppendIn(nodeData) {
170
+ // 设置只允许custom-rect节点被添加到此分组中
171
+ return nodeData.type === "custom-rect";
172
+ }
173
+ }
174
+ ```
175
+
176
+ :::info{title=提示}
177
+ 在节点不被允许添加到分组中时,节点仍然会显示在用户放的位置,只是这个节点不属于分组。如果你希望添加的节点被删除,可以监听`group:not-allowed`
178
+ 事件,然后手动删除这个节点。
179
+ :::
180
+
181
+ ### getAddableOutlineStyle
182
+
183
+ 设置拖动节点到分组上时,分组高亮的提示效果样式。
184
+
185
+ ```tsx | pure
186
+ class MyGroupModel extends GroupNode.model {
187
+ getAddableOutlineStyle() {
188
+ const style = super.getAddableOutlineStyle();
189
+ style.stroke = "#AEAFAE";
190
+ style.strokeDasharray = "3 3";
191
+ return style;
192
+ }
193
+ }
194
+ ```
195
+
196
+ :::info{title=如何阻止节点连接到分组上?}
197
+ 分组是一种特殊的节点,所以仍然可以通过[自定义连接规则校验](../advanced/node.zh.md#连接规则)
198
+ 来实现不允许节点和分组直接相连。但是请不要将分组的锚点数量设置为
199
+ 0,因为在分组被折叠时,会通过分组的锚点与外部节点相连来表示分组内部节点与外部节点的关系。
200
+ :::
201
+
202
+ ## 示例
203
+
204
+ <a href="https://codesandbox.io/embed/bold-moore-vgvpf?fontsize=14&hidenavigation=1&theme=dark&view=preview" target="_blank"> 去 CodeSandbox 查看示例</a>
205
+
206
+ :::info{title=关于泳道}
207
+ 分组功能不是泳道,需要开发者在分组的基础上自己实现。后续 LogicFlow 提供的 Bpmn 全功能支持会支持 BPMN
208
+ 泳道。也欢迎自己实现了的同学给我们 PR。
209
+ :::
@@ -0,0 +1,50 @@
1
+ ---
2
+ nav: guide
3
+ group:
4
+ title: Plug-in functionality
5
+ order: 3
6
+ title: Highlight
7
+ order: 12
8
+ toc: content
9
+ ---
10
+
11
+ When the number of elements on a canvas gradually increases, it becomes more difficult to quickly identify which node is currently in focus. How many lines are connected to it and which nodes are connected to it will gradually increase. In order to facilitate the user to quickly see clearly the currently focused node. We provide a highlighting function for the associated information of the focal node.
12
+
13
+ ## Enable
14
+
15
+ ```tsx | pure
16
+
17
+ import LogicFlow from '@logicflow/core'
18
+ import { Highlight } from '@logicflow/extension'
19
+ import '@logicflow/extension/es/index.css'
20
+
21
+ LogicFlow.use(Highlight)
22
+
23
+ ```
24
+
25
+ ## Configuration items
26
+
27
+ | Field | Type | Function | Required | Description |
28
+ |--------|---------|--------------------------------------------------------------|----------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
29
+ | mode | string | Highlight type, used to control the highlight display effect | | This configuration item supports three values: <br/>1. 'single': Highlight the current node/edge<br/>2. 'path': Highlight all edges and nodes on the path of the current node/edge<br/>3. 'neighbour': Highlight all edges and nodes directly associated with the current node/edge |
30
+ | enable | boolean | Whether to enable highlighting | | This configuration item is used to control whether to display the highlighting effect |
31
+
32
+ ## Default state
33
+ By default, the highlight plug-in is enabled, using the mode of highlighting all edges and nodes on the path of the current node/edge. It will take effect when the mouse moves into the node.
34
+
35
+ ## API
36
+ The Highlight plug-in provides an API for modifying the state:
37
+
38
+ ### setMode
39
+ Set the highlighting mode, usage:
40
+ ```tsx | pure
41
+ lf.extension.highlight.setMode('single');
42
+
43
+ ```
44
+ ### setEnable
45
+ Set the enable state, usage:
46
+ ```tsx | pure
47
+ // Set to disable highlighting
48
+ lf.extension.highlight.setEnable(false);
49
+
50
+ ```
@@ -0,0 +1,50 @@
1
+ ---
2
+ nav: 指南
3
+ group:
4
+ title: 插件功能
5
+ order: 3
6
+ title: 高亮 (Highlight)
7
+ order: 12
8
+ toc: content
9
+ ---
10
+
11
+ 当一张画布上的元素逐渐增多时,快速分辨出当前获焦的节点是谁,都连了几条线,连到了哪些节点上的难度也会逐渐增大,为了方便用户快速看清当前获焦节点的关联信息,我们提供了高亮功能。
12
+
13
+ ## 启用
14
+ ```tsx | pure
15
+
16
+ import LogicFlow from '@logicflow/core'
17
+ import { Highlight } from '@logicflow/extension'
18
+ import '@logicflow/extension/es/index.css'
19
+
20
+ LogicFlow.use(Highlight)
21
+ ```
22
+
23
+ ## 配置项
24
+ | 字段 | 类型 | 作用 | 是否必须 | 描述 |
25
+ | ------ | ------- | ------------------------------ | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
26
+ | mode | string | 高亮类型,用于控制高亮展示效果 | | 该配置项支持传入三个值:<br/>1. 'single': 高亮当前节点/边<br/>2. 'path': 高亮当前节点/边所在路径上所有的边和节点<br/>3. 'neighbour': 高亮当前节点/边直接关联的所有边和节点 |
27
+ | enable | boolean | 是否启用高亮 | | 该配置项用于控制是否展示高亮效果 |
28
+
29
+ ## 默认状态
30
+ 默认情况下,高亮插件处于启用状态,使用的是 高亮当前节点/边所在路径上所有的边和节点 模式,鼠标移入节点内部就会生效。
31
+
32
+ ## API
33
+ Highlight插件对外提供了修改状态的API:
34
+
35
+ ### setMode
36
+ 设置高亮方式,用法:
37
+
38
+ ```tsx | pure
39
+ lf.extension.highlight.setMode('single');
40
+
41
+ ```
42
+
43
+ ### setEnable
44
+ 设置启用状态,用法:
45
+
46
+ ```tsx | pure
47
+ // 设置不启用高亮
48
+ lf.extension.highlight.setEnable(false);
49
+
50
+ ```
@@ -0,0 +1,52 @@
1
+ ---
2
+ nav: Guide
3
+ group:
4
+ title: Plug-in functionality
5
+ order: 3
6
+ title: InsertNodeInPolyline
7
+ order: 9
8
+ toc: content
9
+ ---
10
+
11
+ ## Function
12
+
13
+ Drag a node to the center of an edge, it will automatically become the point in the center of the
14
+ edge.
15
+ Example: There is a line E from node A to node B, drag a node N to the line E, release the mouse
16
+ when the center of node N is exactly on the path of the line E, then node N becomes the middle node
17
+ between A and B, the original edge E is deleted, and two new lines are generated, respectively A to
18
+ N and N to B. The examples are as follows.
19
+
20
+ <!-- TODO -->
21
+ <a href="https://examples.logic-flow.cn/demo/dist/examples/#/extension/InserNodeInPolyline?from=doc" target="_blank"> Go to CodeSandbox for examples </a>
22
+
23
+ ## Support
24
+
25
+ Currently only the fold line is supported
26
+
27
+ ## Use
28
+
29
+ ```tsx | pure
30
+ import LogicFlow from '@logicflow/core'
31
+ import '@logicflow/core/lib/style/index.css'
32
+ import { InsertNodeInPolyline } from '@logicflow/extension'
33
+ import '@logicflow/extension/lib/style/index.css'
34
+
35
+ LogicFlow.use(InsertNodeInPolyline)
36
+ ```
37
+
38
+ ## Personalized Configuration
39
+
40
+ There are 2 types of node drag and drop:
41
+
42
+ - The first one is dragging and dropping nodes from the control panel to the canvas, calling Dnd's
43
+ Api to add nodes, which is supported by this plugin by default. Disable this function as follows:
44
+ ```tsx | pure
45
+ InsertNodeInPolyline.dndAdd = false;
46
+ ```
47
+ - The second is the free node in the canvas, i.e. the node that has no edges with other nodes, drag
48
+ and drop to adjust the position to the edges, which is supported by this plugin by default.
49
+ Disable this function as follows:
50
+ ```tsx | pure
51
+ InsertNodeInPolyline.dropAdd = false;
52
+ ```
@@ -0,0 +1,47 @@
1
+ ---
2
+ nav: 指南
3
+ group:
4
+ title: 插件功能
5
+ order: 3
6
+ title: 边上插入节点 (InsertNodeInPolyline)
7
+ order: 9
8
+ toc: content
9
+ ---
10
+
11
+ ## 功能
12
+
13
+ 拖动节点到边中间,自动成为边中间的点。
14
+ 举例:存在一条节点 A 到节点 B 的折线 E,拖拽一个节点 N 到折线 E 上,当节点 N 的中心点恰好在折线 E
15
+ 的路径上时松开鼠标,这时节点 N 就成为 A 与 B 的中间节点,原来的边 E 被删除,生成两条新的折线,分别是 A 到
16
+ N,N 到 B。示例如下。
17
+
18
+ <!-- TODO -->
19
+ <a href="https://examples.logic-flow.cn/demo/dist/examples/#/extension/InserNodeInPolyline?from=doc" target="_blank"> 去 CodeSandbox 查看示例</a>
20
+
21
+ ## 支持
22
+
23
+ 目前仅支持折线
24
+
25
+ ## 使用
26
+
27
+ ```tsx | pure
28
+ import LogicFlow from '@logicflow/core'
29
+ import '@logicflow/core/lib/style/index.css'
30
+ import { InsertNodeInPolyline } from '@logicflow/extension'
31
+ import '@logicflow/extension/lib/style/index.css'
32
+
33
+ LogicFlow.use(InsertNodeInPolyline)
34
+ ```
35
+
36
+ ## 个性化配置
37
+
38
+ 节点拖拽分为 2 种情况:
39
+
40
+ - 第一种是从控制面板拖拽到画布中,调用 Dnd 的 Api 进行节点添加,本插件默认支持。关闭此功能设置如下:
41
+ ```tsx | pure
42
+ InsertNodeInPolyline.dndAdd = false;
43
+ ```
44
+ - 第二种是画布中的游离节点,即与其他节点没有边的节点,拖拽调整位置到边上,本插件默认支持。关闭此功能设置如下:
45
+ ```tsx | pure
46
+ InsertNodeInPolyline.dropAdd = false;
47
+ ```
@@ -0,0 +1,72 @@
1
+ ---
2
+ nav: Guide
3
+ group:
4
+ title: Plug-in functionality
5
+ order: 3
6
+ title: Plug-in Introduction
7
+ order: 0
8
+ toc: content
9
+ ---
10
+
11
+ > LogicFlow's original goal was to support an extensible flowchart editor that can meet a wide range of business needs. To keep LogicFlow extensible, non-core features are provided through plugins.
12
+ >
13
+ > Common product features are usually provided by `@logicflow/extension`, while automatic layout is provided by `@logicflow/layout`. Docs for both kinds of capabilities are included in this plugin tutorial group.
14
+
15
+ ## Usage Guidelines
16
+
17
+ The `@logicflow/extension` package provides a number of out-of-the-box components that quickly support common features in the product, such as the control panel, right-click menus, and more.
18
+
19
+ ```tsx | pure
20
+ import LogicFlow from '@logicflow/core'
21
+ import { Control, Menu, DndPanel } from '@logicflow/extension'
22
+ import '@logicflow/extension/lib/style/index.css'
23
+
24
+ LogicFlow.use(Control)
25
+ LogicFlow.use(Menu)
26
+ LogicFlow.use(DndPanel)
27
+ ```
28
+
29
+
30
+ ### Installation of global plug-ins
31
+
32
+ npm:
33
+ ```tsx | pure
34
+ import { BpmnElement } from '@logicflow/extension'
35
+
36
+ LogicFlow.use(BpmnElement)
37
+ ```
38
+
39
+ cdn:
40
+ ```tsx | pure
41
+ <!--LogicFlow core-css-->
42
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@logicflow/core/dist/style/index.css" />
43
+ <!--LogicFlow extension-css-->
44
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@logicflow/extension/lib/style/index.css" />
45
+ <!--LogicFlow core-js-->
46
+ <script src="https://cdn.jsdelivr.net/npm/@logicflow/core/dist/logic-flow.js"></script>
47
+ <!--LogicFlow's plug-ins support individual introductions, here's an example of a menu plug-in-->
48
+ <script src="https://cdn.jsdelivr.net/npm/@logicflow/extension/lib/Menu.js"></script>
49
+ <script>
50
+ LogicFlow.use(Menu);
51
+ </script>
52
+ ```
53
+
54
+ ### Installing plugins on instances
55
+
56
+ `v1.0.7` Added
57
+
58
+ When a single-page application has multiple pages that use LogicFlow, different pages may use different plugins.LogicFlow is initialized by passing the plugin as a parameter to the constructor, at which point the plugin overrides the global plugin.
59
+
60
+ ```tsx | pure
61
+ import LogicFlow from "@logicflow/core";
62
+ import { DndPanel, SelectionSelect } from "@logicflow/extension";
63
+ import "@logicflow/core/lib/style/index.css";
64
+ // import "@logicflow/core/dist/style/index.css"; // Introduced before version 2.0
65
+ import "@logicflow/extension/lib/style/index.css";
66
+
67
+ const lf = new LogicFlow({
68
+ container: document.querySelector("#app"),
69
+ grid: true,
70
+ plugins: [DndPanel, SelectionSelect]
71
+ });
72
+ ```