@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.
- package/dist/docs/api/logicflow-constructor/index.en.md +106 -0
- package/dist/docs/api/logicflow-constructor/index.zh.md +106 -0
- package/dist/docs/api/logicflow-constructor/use.en.md +61 -0
- package/dist/docs/api/logicflow-constructor/use.zh.md +61 -0
- package/dist/docs/api/logicflow-instance/canvas.en.md +197 -0
- package/dist/docs/api/logicflow-instance/canvas.zh.md +199 -0
- package/dist/docs/api/logicflow-instance/edge.en.md +273 -0
- package/dist/docs/api/logicflow-instance/edge.zh.md +273 -0
- package/dist/docs/api/logicflow-instance/edit-config.en.md +59 -0
- package/dist/docs/api/logicflow-instance/edit-config.zh.md +59 -0
- package/dist/docs/api/logicflow-instance/element.en.md +375 -0
- package/dist/docs/api/logicflow-instance/element.zh.md +379 -0
- package/dist/docs/api/logicflow-instance/event.en.md +326 -0
- package/dist/docs/api/logicflow-instance/event.zh.md +406 -0
- package/dist/docs/api/logicflow-instance/history.en.md +38 -0
- package/dist/docs/api/logicflow-instance/history.zh.md +38 -0
- package/dist/docs/api/logicflow-instance/index.en.md +41 -0
- package/dist/docs/api/logicflow-instance/index.zh.md +41 -0
- package/dist/docs/api/logicflow-instance/node.en.md +308 -0
- package/dist/docs/api/logicflow-instance/node.zh.md +308 -0
- package/dist/docs/api/logicflow-instance/register.en.md +76 -0
- package/dist/docs/api/logicflow-instance/register.zh.md +76 -0
- package/dist/docs/api/logicflow-instance/render-and-data.en.md +179 -0
- package/dist/docs/api/logicflow-instance/render-and-data.zh.md +181 -0
- package/dist/docs/api/logicflow-instance/text.en.md +60 -0
- package/dist/docs/api/logicflow-instance/text.zh.md +60 -0
- package/dist/docs/api/logicflow-instance/theme.en.md +179 -0
- package/dist/docs/api/logicflow-instance/theme.zh.md +179 -0
- package/dist/docs/api/runtime-model/edgeModel.en.md +29 -0
- package/dist/docs/api/runtime-model/edgeModel.zh.md +325 -0
- package/dist/docs/api/runtime-model/graphModel.en.md +275 -0
- package/dist/docs/api/runtime-model/graphModel.zh.md +1153 -0
- package/dist/docs/api/runtime-model/nodeModel.en.md +37 -0
- package/dist/docs/api/runtime-model/nodeModel.zh.md +644 -0
- package/dist/docs/api/type/MainTypes.en.md +598 -0
- package/dist/docs/api/type/MainTypes.zh.md +867 -0
- package/dist/docs/api/type/Theme.en.md +187 -0
- package/dist/docs/api/type/Theme.zh.md +187 -0
- package/dist/docs/api/type/canvas-types.en.md +25 -0
- package/dist/docs/api/type/canvas-types.zh.md +25 -0
- package/dist/docs/api/type/index.en.md +96 -0
- package/dist/docs/api/type/index.zh.md +99 -0
- package/dist/docs/api/type/node-types.en.md +21 -0
- package/dist/docs/api/type/node-types.zh.md +21 -0
- package/dist/docs/api/type/plugin-types.en.md +24 -0
- package/dist/docs/api/type/plugin-types.zh.md +24 -0
- package/dist/docs/index.md +11 -0
- package/dist/docs/tutorial/about.en.md +38 -0
- package/dist/docs/tutorial/about.zh.md +65 -0
- package/dist/docs/tutorial/advanced/dnd.en.md +62 -0
- package/dist/docs/tutorial/advanced/dnd.zh.md +52 -0
- package/dist/docs/tutorial/advanced/edge.en.md +64 -0
- package/dist/docs/tutorial/advanced/edge.zh.md +66 -0
- package/dist/docs/tutorial/advanced/keyboard.en.md +70 -0
- package/dist/docs/tutorial/advanced/keyboard.zh.md +67 -0
- package/dist/docs/tutorial/advanced/node.en.md +338 -0
- package/dist/docs/tutorial/advanced/node.zh.md +338 -0
- package/dist/docs/tutorial/advanced/react.en.md +106 -0
- package/dist/docs/tutorial/advanced/react.zh.md +114 -0
- package/dist/docs/tutorial/advanced/silent-mode.en.md +75 -0
- package/dist/docs/tutorial/advanced/silent-mode.zh.md +71 -0
- package/dist/docs/tutorial/advanced/snapline.en.md +54 -0
- package/dist/docs/tutorial/advanced/vue.en.md +249 -0
- package/dist/docs/tutorial/advanced/vue.zh.md +248 -0
- package/dist/docs/tutorial/ai.en.md +64 -0
- package/dist/docs/tutorial/ai.zh.md +64 -0
- package/dist/docs/tutorial/basic/background.en.md +50 -0
- package/dist/docs/tutorial/basic/canvas.en.md +164 -0
- package/dist/docs/tutorial/basic/canvas.zh.md +183 -0
- package/dist/docs/tutorial/basic/class.en.md +106 -0
- package/dist/docs/tutorial/basic/class.zh.md +103 -0
- package/dist/docs/tutorial/basic/edge.en.md +151 -0
- package/dist/docs/tutorial/basic/edge.zh.md +152 -0
- package/dist/docs/tutorial/basic/event.en.md +70 -0
- package/dist/docs/tutorial/basic/event.zh.md +66 -0
- package/dist/docs/tutorial/basic/grid.en.md +77 -0
- package/dist/docs/tutorial/basic/node.en.md +358 -0
- package/dist/docs/tutorial/basic/node.zh.md +318 -0
- package/dist/docs/tutorial/basic/theme.en.md +154 -0
- package/dist/docs/tutorial/basic/theme.zh.md +157 -0
- package/dist/docs/tutorial/extension/adapter.en.md +446 -0
- package/dist/docs/tutorial/extension/adapter.zh.md +429 -0
- package/dist/docs/tutorial/extension/bpmn-element.en.md +1427 -0
- package/dist/docs/tutorial/extension/bpmn-element.zh.md +1472 -0
- package/dist/docs/tutorial/extension/control.en.md +117 -0
- package/dist/docs/tutorial/extension/control.zh.md +118 -0
- package/dist/docs/tutorial/extension/curved-edge.en.md +46 -0
- package/dist/docs/tutorial/extension/curved-edge.zh.md +46 -0
- package/dist/docs/tutorial/extension/custom.en.md +142 -0
- package/dist/docs/tutorial/extension/custom.zh.md +138 -0
- package/dist/docs/tutorial/extension/dnd-panel.en.md +109 -0
- package/dist/docs/tutorial/extension/dnd-panel.zh.md +109 -0
- package/dist/docs/tutorial/extension/dynamic-group.en.md +606 -0
- package/dist/docs/tutorial/extension/dynamic-group.zh.md +606 -0
- package/dist/docs/tutorial/extension/group.en.md +217 -0
- package/dist/docs/tutorial/extension/group.zh.md +209 -0
- package/dist/docs/tutorial/extension/highlight.en.md +50 -0
- package/dist/docs/tutorial/extension/highlight.zh.md +50 -0
- package/dist/docs/tutorial/extension/insert-node-in-polyline.en.md +52 -0
- package/dist/docs/tutorial/extension/insert-node-in-polyline.zh.md +47 -0
- package/dist/docs/tutorial/extension/intro.en.md +72 -0
- package/dist/docs/tutorial/extension/intro.zh.md +95 -0
- package/dist/docs/tutorial/extension/label.en.md +136 -0
- package/dist/docs/tutorial/extension/label.zh.md +135 -0
- package/dist/docs/tutorial/extension/layout.en.md +156 -0
- package/dist/docs/tutorial/extension/layout.zh.md +156 -0
- package/dist/docs/tutorial/extension/menu.en.md +319 -0
- package/dist/docs/tutorial/extension/menu.zh.md +377 -0
- package/dist/docs/tutorial/extension/minimap.en.md +164 -0
- package/dist/docs/tutorial/extension/minimap.zh.md +180 -0
- package/dist/docs/tutorial/extension/node-resize.en.md +199 -0
- package/dist/docs/tutorial/extension/node-resize.zh.md +221 -0
- package/dist/docs/tutorial/extension/pool.en.md +227 -0
- package/dist/docs/tutorial/extension/pool.zh.md +227 -0
- package/dist/docs/tutorial/extension/proximity-connect.en.md +104 -0
- package/dist/docs/tutorial/extension/proximity-connect.zh.md +107 -0
- package/dist/docs/tutorial/extension/selection.en.md +166 -0
- package/dist/docs/tutorial/extension/selection.zh.md +150 -0
- package/dist/docs/tutorial/extension/snapshot.en.md +276 -0
- package/dist/docs/tutorial/extension/snapshot.zh.md +276 -0
- package/dist/docs/tutorial/get-started.en.md +501 -0
- package/dist/docs/tutorial/get-started.zh.md +139 -0
- package/dist/docs/tutorial/update.en.md +213 -0
- package/dist/docs/tutorial/update.zh.md +212 -0
- package/dist/index.css +3 -2
- package/dist/index.min.js +1 -1
- package/dist/index.min.js.map +1 -1
- package/es/LogicFlow.d.ts +9 -0
- package/es/LogicFlow.js +0 -1
- package/es/constant/index.d.ts +1 -1
- package/es/constant/index.js +1 -1
- package/es/constant/theme.d.ts +136 -0
- package/es/constant/theme.js +680 -0
- package/es/index.css +3 -2
- package/es/model/GraphModel.d.ts +10 -2
- package/es/model/GraphModel.js +48 -14
- package/es/model/TransformModel.js +9 -9
- package/es/model/edge/BaseEdgeModel.js +7 -2
- package/es/model/edge/PolylineEdgeModel.d.ts +7 -0
- package/es/model/edge/PolylineEdgeModel.js +136 -7
- package/es/model/node/BaseNodeModel.d.ts +12 -1
- package/es/model/node/BaseNodeModel.js +9 -2
- package/es/model/node/HtmlNodeModel.d.ts +12 -0
- package/es/model/node/HtmlNodeModel.js +19 -0
- package/es/model/node/PolygonNodeModel.js +3 -3
- package/es/options.d.ts +4 -2
- package/es/style/index.css +3 -2
- package/es/style/index.less +3 -2
- package/es/style/raw.d.ts +1 -1
- package/es/style/raw.js +1 -1
- package/es/tool/MultipleSelectTool.js +10 -5
- package/es/util/drag.js +0 -1
- package/es/util/edge.d.ts +40 -1
- package/es/util/edge.js +43 -9
- package/es/util/geometry.d.ts +8 -0
- package/es/util/geometry.js +79 -0
- package/es/util/theme.d.ts +2 -65
- package/es/util/theme.js +4 -281
- package/es/view/Anchor.d.ts +1 -0
- package/es/view/Anchor.js +24 -21
- package/es/view/Control.d.ts +5 -0
- package/es/view/Control.js +44 -57
- package/es/view/edge/BaseEdge.js +9 -0
- package/es/view/edge/PolylineEdge.js +13 -2
- package/es/view/node/BaseNode.d.ts +1 -0
- package/es/view/node/BaseNode.js +23 -11
- package/es/view/node/HtmlNode.js +2 -4
- package/es/view/overlay/CanvasOverlay.js +5 -2
- package/es/view/overlay/Grid.d.ts +12 -1
- package/es/view/overlay/Grid.js +85 -23
- package/es/view/overlay/OutlineOverlay.d.ts +1 -0
- package/es/view/overlay/OutlineOverlay.js +18 -17
- package/es/view/overlay/gridConfig.d.ts +46 -0
- package/es/view/overlay/gridConfig.js +99 -0
- package/es/view/shape/Polygon.d.ts +0 -7
- package/es/view/shape/Polygon.js +12 -43
- package/lib/LogicFlow.d.ts +9 -0
- package/lib/LogicFlow.js +0 -1
- package/lib/constant/index.d.ts +1 -1
- package/lib/constant/index.js +16 -2
- package/lib/constant/theme.d.ts +136 -0
- package/lib/constant/theme.js +683 -0
- package/lib/index.css +3 -2
- package/lib/model/GraphModel.d.ts +10 -2
- package/lib/model/GraphModel.js +49 -15
- package/lib/model/TransformModel.js +9 -9
- package/lib/model/edge/BaseEdgeModel.js +7 -2
- package/lib/model/edge/PolylineEdgeModel.d.ts +7 -0
- package/lib/model/edge/PolylineEdgeModel.js +136 -7
- package/lib/model/node/BaseNodeModel.d.ts +12 -1
- package/lib/model/node/BaseNodeModel.js +9 -2
- package/lib/model/node/HtmlNodeModel.d.ts +12 -0
- package/lib/model/node/HtmlNodeModel.js +19 -0
- package/lib/model/node/PolygonNodeModel.js +3 -3
- package/lib/options.d.ts +4 -2
- package/lib/style/index.css +3 -2
- package/lib/style/index.less +3 -2
- package/lib/style/raw.d.ts +1 -1
- package/lib/style/raw.js +1 -1
- package/lib/tool/MultipleSelectTool.js +10 -5
- package/lib/util/drag.js +0 -1
- package/lib/util/edge.d.ts +40 -1
- package/lib/util/edge.js +43 -9
- package/lib/util/geometry.d.ts +8 -0
- package/lib/util/geometry.js +81 -1
- package/lib/util/theme.d.ts +2 -65
- package/lib/util/theme.js +15 -292
- package/lib/view/Anchor.d.ts +1 -0
- package/lib/view/Anchor.js +24 -21
- package/lib/view/Control.d.ts +5 -0
- package/lib/view/Control.js +44 -57
- package/lib/view/edge/BaseEdge.js +9 -0
- package/lib/view/edge/PolylineEdge.js +13 -2
- package/lib/view/node/BaseNode.d.ts +1 -0
- package/lib/view/node/BaseNode.js +22 -10
- package/lib/view/node/HtmlNode.js +1 -3
- package/lib/view/overlay/CanvasOverlay.js +5 -2
- package/lib/view/overlay/Grid.d.ts +12 -1
- package/lib/view/overlay/Grid.js +83 -21
- package/lib/view/overlay/OutlineOverlay.d.ts +1 -0
- package/lib/view/overlay/OutlineOverlay.js +18 -17
- package/lib/view/overlay/gridConfig.d.ts +46 -0
- package/lib/view/overlay/gridConfig.js +104 -0
- package/lib/view/shape/Polygon.d.ts +0 -7
- package/lib/view/shape/Polygon.js +13 -45
- package/package.json +9 -2
- package/scripts/postinstall-ai-prompt.js +67 -0
- package/.turbo/turbo-build$colon$dev.log +0 -10
- package/.turbo/turbo-build.log +0 -33
- package/CHANGELOG.md +0 -1849
- package/__tests__/algorithm/egde.test.ts +0 -131
- package/__tests__/algorithm/index.test.ts +0 -74
- package/__tests__/algorithm/outline.test.ts +0 -43
- package/__tests__/bugs/1545-spec.test.ts +0 -42
- package/__tests__/event/event.test.ts +0 -22
- package/__tests__/history/history.test.ts +0 -28
- package/__tests__/logicflow.test.ts +0 -575
- package/__tests__/model/graphmodel.test.ts +0 -87
- package/__tests__/util/compatible.test.ts +0 -48
- package/__tests__/util/edge.test.ts +0 -224
- package/__tests__/util/geometry.test.ts +0 -14
- package/__tests__/util/graph.test.ts +0 -16
- package/__tests__/util/matrix.test.ts +0 -41
- package/__tests__/util/node.test.ts +0 -68
- package/__tests__/util/sampling.test.ts +0 -12
- package/__tests__/util/vector.test.ts +0 -50
- package/__tests__/util/zIndex.test.ts +0 -10
- package/src/LogicFlow.tsx +0 -2008
- package/src/algorithm/edge.ts +0 -67
- package/src/algorithm/index.ts +0 -70
- package/src/algorithm/outline.ts +0 -77
- package/src/algorithm/rotate.ts +0 -55
- package/src/common/drag.ts +0 -219
- package/src/common/history.ts +0 -108
- package/src/common/index.ts +0 -6
- package/src/common/keyboard.ts +0 -108
- package/src/common/matrix.ts +0 -122
- package/src/common/vector.ts +0 -93
- package/src/constant/index.ts +0 -179
- package/src/event/event.md +0 -66
- package/src/event/eventArgs.ts +0 -643
- package/src/event/eventEmitter.ts +0 -156
- package/src/history/index.ts +0 -119
- package/src/index.less +0 -1
- package/src/index.ts +0 -26
- package/src/keyboard/index.ts +0 -112
- package/src/keyboard/shortcut.ts +0 -200
- package/src/model/BaseModel.ts +0 -250
- package/src/model/EditConfigModel.ts +0 -334
- package/src/model/GraphModel.ts +0 -1788
- package/src/model/NestedTransformModel.ts +0 -121
- package/src/model/SnaplineModel.ts +0 -256
- package/src/model/TransformModel.ts +0 -258
- package/src/model/edge/BaseEdgeModel.ts +0 -777
- package/src/model/edge/BezierEdgeModel.ts +0 -197
- package/src/model/edge/LineEdgeModel.ts +0 -36
- package/src/model/edge/PolylineEdgeModel.ts +0 -672
- package/src/model/edge/index.ts +0 -4
- package/src/model/index.ts +0 -9
- package/src/model/node/BaseNodeModel.ts +0 -949
- package/src/model/node/CircleNodeModel.ts +0 -91
- package/src/model/node/DiamondNodeModel.ts +0 -132
- package/src/model/node/EllipseNodeModel.ts +0 -98
- package/src/model/node/HtmlNodeModel.ts +0 -50
- package/src/model/node/PolygonNodeModel.ts +0 -150
- package/src/model/node/RectNodeModel.ts +0 -69
- package/src/model/node/TextNodeModel.ts +0 -54
- package/src/model/node/index.ts +0 -8
- package/src/options.ts +0 -145
- package/src/style/index.less +0 -261
- package/src/style/raw.ts +0 -220
- package/src/tool/MultipleSelectTool.tsx +0 -132
- package/src/tool/TextEditTool.tsx +0 -193
- package/src/tool/index.ts +0 -101
- package/src/typings.d.ts +0 -5
- package/src/util/animation.ts +0 -29
- package/src/util/browser.ts +0 -4
- package/src/util/compatible.ts +0 -15
- package/src/util/drag.ts +0 -220
- package/src/util/edge.ts +0 -1060
- package/src/util/geometry.ts +0 -55
- package/src/util/graph.ts +0 -46
- package/src/util/index.ts +0 -17
- package/src/util/matrix.ts +0 -129
- package/src/util/mobx.ts +0 -23
- package/src/util/node.ts +0 -543
- package/src/util/raf.ts +0 -28
- package/src/util/resize.ts +0 -606
- package/src/util/sampling.ts +0 -85
- package/src/util/theme.ts +0 -375
- package/src/util/uuid.ts +0 -26
- package/src/util/vector.ts +0 -93
- package/src/util/zIndex.ts +0 -6
- package/src/view/Anchor.tsx +0 -445
- package/src/view/Control.tsx +0 -512
- package/src/view/Graph.tsx +0 -141
- package/src/view/Rotate.tsx +0 -113
- package/src/view/behavior/dnd.ts +0 -162
- package/src/view/behavior/index.ts +0 -2
- package/src/view/behavior/snapline.ts +0 -16
- package/src/view/edge/AdjustPoint.tsx +0 -425
- package/src/view/edge/Arrow.tsx +0 -54
- package/src/view/edge/BaseEdge.tsx +0 -650
- package/src/view/edge/BezierEdge.tsx +0 -101
- package/src/view/edge/LineEdge.tsx +0 -81
- package/src/view/edge/PolylineEdge.tsx +0 -299
- package/src/view/edge/index.ts +0 -6
- package/src/view/index.ts +0 -8
- package/src/view/node/BaseNode.tsx +0 -571
- package/src/view/node/CircleNode.tsx +0 -21
- package/src/view/node/DiamondNode.tsx +0 -24
- package/src/view/node/EllipseNode.tsx +0 -22
- package/src/view/node/HtmlNode.tsx +0 -95
- package/src/view/node/PolygonNode.tsx +0 -28
- package/src/view/node/RectNode.tsx +0 -30
- package/src/view/node/TextNode.tsx +0 -39
- package/src/view/node/index.ts +0 -8
- package/src/view/overlay/BackgroundOverlay.tsx +0 -34
- package/src/view/overlay/BezierAdjustOverlay.tsx +0 -150
- package/src/view/overlay/CanvasOverlay.tsx +0 -288
- package/src/view/overlay/Grid.tsx +0 -162
- package/src/view/overlay/ModificationOverlay.tsx +0 -31
- package/src/view/overlay/OutlineOverlay.tsx +0 -170
- package/src/view/overlay/SnaplineOverlay.tsx +0 -44
- package/src/view/overlay/ToolOverlay.tsx +0 -65
- package/src/view/overlay/getTransformHoc.tsx +0 -50
- package/src/view/overlay/index.ts +0 -8
- package/src/view/shape/Circle.tsx +0 -41
- package/src/view/shape/Ellipse.tsx +0 -42
- package/src/view/shape/Line.tsx +0 -39
- package/src/view/shape/Path.tsx +0 -22
- package/src/view/shape/Polygon.tsx +0 -91
- package/src/view/shape/Polyline.tsx +0 -31
- package/src/view/shape/Rect.tsx +0 -44
- package/src/view/shape/Text.tsx +0 -169
- package/src/view/shape/index.ts +0 -8
- package/src/view/text/BaseText.tsx +0 -134
- package/src/view/text/LineText.tsx +0 -168
- package/src/view/text/index.ts +0 -2
- package/stats.html +0 -4842
- 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
|
+
```
|