@logicflow/extension 2.2.0 → 2.2.1

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 (201) hide show
  1. package/README.md +16 -0
  2. package/dist/index.css +1 -1
  3. package/dist/index.min.js +1 -1
  4. package/dist/index.min.js.map +1 -1
  5. package/es/NodeResize/node/RectResize.d.ts +0 -6
  6. package/es/NodeResize/node/RectResize.js +2 -11
  7. package/es/bpmn-elements-adapter/json2xml.d.ts +2 -1
  8. package/es/bpmn-elements-adapter/json2xml.js +18 -4
  9. package/es/bpmn-elements-adapter/xml2json.js +2 -7
  10. package/es/components/control/index.d.ts +1 -0
  11. package/es/components/control/index.js +24 -11
  12. package/es/components/mini-map/index.js +1 -1
  13. package/es/dynamic-group/model.d.ts +2 -1
  14. package/es/dynamic-group/model.js +28 -11
  15. package/es/dynamic-group/node.js +1 -0
  16. package/es/index.css +1 -1
  17. package/es/index.d.ts +1 -0
  18. package/es/index.js +2 -0
  19. package/es/insert-node-in-polyline/index.js +11 -35
  20. package/es/materials/curved-edge/index.js +49 -21
  21. package/es/materials/group/GroupNode.d.ts +0 -6
  22. package/es/materials/group/GroupNode.js +1 -6
  23. package/es/pool/LaneModel.d.ts +90 -0
  24. package/es/pool/LaneModel.js +252 -0
  25. package/es/pool/LaneView.d.ts +40 -0
  26. package/es/pool/LaneView.js +202 -0
  27. package/es/pool/PoolModel.d.ts +120 -0
  28. package/es/pool/PoolModel.js +586 -0
  29. package/es/pool/PoolView.d.ts +17 -0
  30. package/es/pool/PoolView.js +76 -0
  31. package/es/pool/constant.d.ts +15 -0
  32. package/es/pool/constant.js +17 -0
  33. package/es/pool/index.d.ts +89 -0
  34. package/es/pool/index.js +524 -0
  35. package/es/pool/utils.d.ts +19 -0
  36. package/es/pool/utils.js +33 -0
  37. package/es/style/index.css +1 -1
  38. package/es/style/raw.d.ts +1 -1
  39. package/es/style/raw.js +1 -1
  40. package/es/tools/label/LabelOverlay.js +3 -3
  41. package/es/tools/label/mediumEditor.d.ts +1 -1
  42. package/es/tools/label/mediumEditor.js +89 -52
  43. package/es/tools/snapshot/index.d.ts +7 -3
  44. package/es/tools/snapshot/index.js +72 -77
  45. package/lib/NodeResize/node/RectResize.d.ts +0 -6
  46. package/lib/NodeResize/node/RectResize.js +1 -10
  47. package/lib/bpmn-elements-adapter/json2xml.d.ts +2 -1
  48. package/lib/bpmn-elements-adapter/json2xml.js +19 -4
  49. package/lib/bpmn-elements-adapter/xml2json.js +2 -7
  50. package/lib/components/control/index.d.ts +1 -0
  51. package/lib/components/control/index.js +24 -11
  52. package/lib/components/mini-map/index.js +1 -1
  53. package/lib/dynamic-group/model.d.ts +2 -1
  54. package/lib/dynamic-group/model.js +28 -11
  55. package/lib/dynamic-group/node.js +1 -0
  56. package/lib/index.css +1 -1
  57. package/lib/index.d.ts +1 -0
  58. package/lib/index.js +2 -0
  59. package/lib/insert-node-in-polyline/index.js +10 -34
  60. package/lib/materials/curved-edge/index.js +49 -21
  61. package/lib/materials/group/GroupNode.d.ts +0 -6
  62. package/lib/materials/group/GroupNode.js +1 -6
  63. package/lib/pool/LaneModel.d.ts +90 -0
  64. package/lib/pool/LaneModel.js +255 -0
  65. package/lib/pool/LaneView.d.ts +40 -0
  66. package/lib/pool/LaneView.js +205 -0
  67. package/lib/pool/PoolModel.d.ts +120 -0
  68. package/lib/pool/PoolModel.js +589 -0
  69. package/lib/pool/PoolView.d.ts +17 -0
  70. package/lib/pool/PoolView.js +79 -0
  71. package/lib/pool/constant.d.ts +15 -0
  72. package/lib/pool/constant.js +20 -0
  73. package/lib/pool/index.d.ts +89 -0
  74. package/lib/pool/index.js +527 -0
  75. package/lib/pool/utils.d.ts +19 -0
  76. package/lib/pool/utils.js +38 -0
  77. package/lib/style/index.css +1 -1
  78. package/lib/style/raw.d.ts +1 -1
  79. package/lib/style/raw.js +1 -1
  80. package/lib/tools/label/LabelOverlay.js +2 -2
  81. package/lib/tools/label/mediumEditor.d.ts +1 -1
  82. package/lib/tools/label/mediumEditor.js +91 -53
  83. package/lib/tools/snapshot/index.d.ts +7 -3
  84. package/lib/tools/snapshot/index.js +72 -77
  85. package/package.json +10 -7
  86. package/.turbo/turbo-build.log +0 -38
  87. package/CHANGELOG.md +0 -1766
  88. package/__test__/bpmn-adapter.test.js +0 -227
  89. package/es/materials/curved-edge/__test__/curved-edge.test.d.ts +0 -1
  90. package/es/materials/curved-edge/__test__/curved-edge.test.js +0 -18
  91. package/jest.config.js +0 -198
  92. package/lib/materials/curved-edge/__test__/curved-edge.test.d.ts +0 -1
  93. package/lib/materials/curved-edge/__test__/curved-edge.test.js +0 -20
  94. package/rollup.config.js +0 -52
  95. package/src/NodeResize/BasicShape/Ellipse.tsx +0 -22
  96. package/src/NodeResize/BasicShape/Polygon.tsx +0 -24
  97. package/src/NodeResize/BasicShape/Rect.tsx +0 -44
  98. package/src/NodeResize/control/Control.tsx +0 -537
  99. package/src/NodeResize/control/ControlGroup.tsx +0 -76
  100. package/src/NodeResize/control/Util.ts +0 -206
  101. package/src/NodeResize/index.ts +0 -26
  102. package/src/NodeResize/node/DiamondResize.tsx +0 -149
  103. package/src/NodeResize/node/EllipseResize.tsx +0 -140
  104. package/src/NodeResize/node/HtmlResize.tsx +0 -125
  105. package/src/NodeResize/node/RectResize.tsx +0 -146
  106. package/src/NodeResize/node/index.ts +0 -4
  107. package/src/bpmn/constant.ts +0 -56
  108. package/src/bpmn/events/EndEvent.ts +0 -73
  109. package/src/bpmn/events/StartEvent.ts +0 -52
  110. package/src/bpmn/events/index.ts +0 -2
  111. package/src/bpmn/flow/SequenceFlow.ts +0 -25
  112. package/src/bpmn/flow/index.ts +0 -1
  113. package/src/bpmn/gateways/ExclusiveGateway.ts +0 -71
  114. package/src/bpmn/gateways/index.ts +0 -1
  115. package/src/bpmn/getBpmnId.ts +0 -31
  116. package/src/bpmn/index.ts +0 -60
  117. package/src/bpmn/tasks/ServiceTask.ts +0 -63
  118. package/src/bpmn/tasks/UserTask.ts +0 -64
  119. package/src/bpmn/tasks/index.ts +0 -2
  120. package/src/bpmn-adapter/bpmnIds.ts +0 -31
  121. package/src/bpmn-adapter/index.ts +0 -835
  122. package/src/bpmn-adapter/json2xml.ts +0 -127
  123. package/src/bpmn-adapter/xml2json.ts +0 -544
  124. package/src/bpmn-elements/README.md +0 -223
  125. package/src/bpmn-elements/__tests__/definition.test.js +0 -72
  126. package/src/bpmn-elements/index.d.ts +0 -26
  127. package/src/bpmn-elements/index.ts +0 -107
  128. package/src/bpmn-elements/presets/Event/EndEventFactory.ts +0 -114
  129. package/src/bpmn-elements/presets/Event/IntermediateCatchEvent.ts +0 -108
  130. package/src/bpmn-elements/presets/Event/IntermediateThrowEvent.ts +0 -109
  131. package/src/bpmn-elements/presets/Event/StartEventFactory.ts +0 -114
  132. package/src/bpmn-elements/presets/Event/boundaryEventFactory.ts +0 -117
  133. package/src/bpmn-elements/presets/Event/index.ts +0 -14
  134. package/src/bpmn-elements/presets/Flow/flow.d.ts +0 -6
  135. package/src/bpmn-elements/presets/Flow/index.ts +0 -8
  136. package/src/bpmn-elements/presets/Flow/manhattan.ts +0 -691
  137. package/src/bpmn-elements/presets/Flow/sequenceFlow.ts +0 -65
  138. package/src/bpmn-elements/presets/Gateway/gateway.ts +0 -107
  139. package/src/bpmn-elements/presets/Gateway/index.ts +0 -23
  140. package/src/bpmn-elements/presets/Pool/Lane.ts +0 -211
  141. package/src/bpmn-elements/presets/Pool/Pool.ts +0 -284
  142. package/src/bpmn-elements/presets/Pool/index.ts +0 -89
  143. package/src/bpmn-elements/presets/Task/index.ts +0 -122
  144. package/src/bpmn-elements/presets/Task/subProcess.ts +0 -189
  145. package/src/bpmn-elements/presets/Task/task.ts +0 -193
  146. package/src/bpmn-elements/presets/icons.ts +0 -155
  147. package/src/bpmn-elements/utils.ts +0 -52
  148. package/src/bpmn-elements-adapter/README.md +0 -293
  149. package/src/bpmn-elements-adapter/__tests__/adapter_in.test.js +0 -528
  150. package/src/bpmn-elements-adapter/__tests__/adapter_out.test.js +0 -569
  151. package/src/bpmn-elements-adapter/constant.ts +0 -76
  152. package/src/bpmn-elements-adapter/index.ts +0 -1134
  153. package/src/bpmn-elements-adapter/json2xml.ts +0 -91
  154. package/src/bpmn-elements-adapter/xml2json.ts +0 -548
  155. package/src/components/context-menu/index.ts +0 -253
  156. package/src/components/control/index.ts +0 -141
  157. package/src/components/dnd-panel/index.ts +0 -137
  158. package/src/components/highlight/index.ts +0 -227
  159. package/src/components/menu/index.ts +0 -748
  160. package/src/components/mini-map/index.ts +0 -686
  161. package/src/components/selection-select/index.ts +0 -387
  162. package/src/dynamic-group/index.ts +0 -775
  163. package/src/dynamic-group/model.ts +0 -562
  164. package/src/dynamic-group/node.ts +0 -288
  165. package/src/dynamic-group/utils.ts +0 -46
  166. package/src/index.less +0 -1
  167. package/src/index.ts +0 -45
  168. package/src/insert-node-in-polyline/edge.ts +0 -175
  169. package/src/insert-node-in-polyline/index.ts +0 -187
  170. package/src/materials/curved-edge/__test__/curved-edge.test.ts +0 -46
  171. package/src/materials/curved-edge/index.ts +0 -185
  172. package/src/materials/group/GroupNode.ts +0 -442
  173. package/src/materials/group/index.ts +0 -542
  174. package/src/materials/node-selection/index.ts +0 -380
  175. package/src/mindmap/fakerRoot.ts +0 -19
  176. package/src/mindmap/index.ts +0 -328
  177. package/src/mindmap/markContent.ts +0 -81
  178. package/src/mindmap/markContentOption.ts +0 -81
  179. package/src/mindmap/markEntity.ts +0 -82
  180. package/src/mindmap/markRoot.ts +0 -83
  181. package/src/mindmap/theme.ts +0 -11
  182. package/src/rect-label-node/RectLabelNodeView.ts +0 -33
  183. package/src/rect-label-node/index.ts +0 -15
  184. package/src/style/index.less +0 -342
  185. package/src/style/raw.ts +0 -295
  186. package/src/tools/auto-layout/index.ts +0 -282
  187. package/src/tools/flow-path/index.ts +0 -233
  188. package/src/tools/label/Label.tsx +0 -357
  189. package/src/tools/label/LabelModel.ts +0 -83
  190. package/src/tools/label/LabelOverlay.tsx +0 -158
  191. package/src/tools/label/algorithm.ts +0 -42
  192. package/src/tools/label/index.ts +0 -479
  193. package/src/tools/label/mediumEditor.ts +0 -94
  194. package/src/tools/label/utils.ts +0 -395
  195. package/src/tools/proximity-connect/index.ts +0 -435
  196. package/src/tools/snapshot/README.md +0 -145
  197. package/src/tools/snapshot/index.ts +0 -718
  198. package/src/tools/snapshot/utils.ts +0 -163
  199. package/src/turbo-adapter/index.ts +0 -212
  200. package/stats.html +0 -4842
  201. package/tsconfig.json +0 -18
@@ -1,537 +0,0 @@
1
- import {
2
- h,
3
- Component,
4
- GraphModel,
5
- BaseNodeModel,
6
- BaseEdgeModel,
7
- RectNodeModel,
8
- DiamondNodeModel,
9
- EllipseNodeModel,
10
- ModelType,
11
- Rect,
12
- LogicFlowUtil,
13
- } from '@logicflow/core'
14
- import { RectResizeModel } from '../node'
15
-
16
- type VectorData = Record<'deltaX' | 'deltaY', number>
17
-
18
- const { StepDrag } = LogicFlowUtil
19
-
20
- interface IControlProps {
21
- index: number
22
- x: number
23
- y: number
24
- model: BaseNodeModel
25
- graphModel: GraphModel
26
- style?: CSSStyleDeclaration
27
- }
28
-
29
- interface IControlState {
30
- startX: number
31
- startY: number
32
- endX: number
33
- endY: number
34
- dragging: boolean
35
- }
36
-
37
- class Control extends Component<IControlProps, IControlState> {
38
- index: number
39
- nodeModel: BaseNodeModel
40
- graphModel: GraphModel
41
- dragHandler: LogicFlowUtil.StepDrag
42
-
43
- constructor(props: IControlProps) {
44
- super()
45
- this.index = props.index
46
- this.nodeModel = props.model
47
- this.graphModel = props.graphModel
48
- // 为保证对齐线功能正常使用,step默认是网格grid的两倍,
49
- // 没有网格设置,默认为2,保证坐标是整数
50
- // let step = 2;
51
- // if (gridSize > 1) {
52
- // step = 2 * gridSize;
53
- // }
54
- // if (this.nodeModel.gridSize) {
55
- // step = 2 * this.nodeModel.gridSize;
56
- // }
57
-
58
- this.dragHandler = new StepDrag({
59
- onDragging: this.onDragging,
60
- onDragEnd: this.onDragEnd,
61
- step: 1,
62
- })
63
- }
64
-
65
- getNodeEdges(nodeId: string) {
66
- const { graphModel } = this
67
- const { edges } = graphModel
68
- const sourceEdges: BaseEdgeModel[] = []
69
- const targetEdges: BaseEdgeModel[] = []
70
- for (let i = 0; i < edges.length; i++) {
71
- const edgeModel = edges[i]
72
- if (edgeModel.sourceNodeId === nodeId) {
73
- sourceEdges.push(edgeModel)
74
- } else if (edges[i].targetNodeId === nodeId) {
75
- targetEdges.push(edgeModel)
76
- }
77
- }
78
- return {
79
- sourceEdges,
80
- targetEdges,
81
- }
82
- }
83
-
84
- // 更新中心点位置,更新文案位置
85
- updatePosition = ({ deltaX, deltaY }: VectorData) => {
86
- const { x, y } = this.nodeModel
87
- this.nodeModel.x = x + deltaX / 2
88
- this.nodeModel.y = y + deltaY / 2
89
- this.nodeModel.moveText(deltaX / 2, deltaY / 2)
90
- }
91
- // 计算control拖动后,节点的宽高
92
- getResize = ({
93
- index,
94
- deltaX,
95
- deltaY,
96
- width,
97
- height,
98
- PCTResizeInfo,
99
- pct = 1,
100
- freezeWidth = false,
101
- freezeHeight = false,
102
- }: any) => {
103
- // TODO: 定义 getResize 方法的参数类型
104
- const resize = {
105
- width,
106
- height,
107
- deltaX,
108
- deltaY,
109
- }
110
- if (PCTResizeInfo) {
111
- const sensitivity = 4 // 越低越灵敏
112
- let deltaScale = 0
113
- let combineDelta = 0
114
- switch (index) {
115
- case 0:
116
- combineDelta = (deltaX * -1 - deltaY) / sensitivity
117
- break
118
- case 1:
119
- combineDelta = (deltaX - deltaY) / sensitivity
120
- break
121
- case 2:
122
- combineDelta = (deltaX + deltaY) / sensitivity
123
- break
124
- case 3:
125
- combineDelta = (deltaX * -1 + deltaY) / sensitivity
126
- break
127
- default:
128
- break
129
- }
130
- if (combineDelta !== 0) {
131
- deltaScale =
132
- Math.round(
133
- (combineDelta / PCTResizeInfo.ResizeBasis.basisHeight) * 100000,
134
- ) / 1000
135
- }
136
- PCTResizeInfo.ResizePCT.widthPCT = Math.max(
137
- Math.min(
138
- PCTResizeInfo.ResizePCT.widthPCT + deltaScale,
139
- PCTResizeInfo.ScaleLimit.maxScaleLimit,
140
- ),
141
- PCTResizeInfo.ScaleLimit.minScaleLimit,
142
- )
143
- PCTResizeInfo.ResizePCT.heightPCT = Math.max(
144
- Math.min(
145
- PCTResizeInfo.ResizePCT.heightPCT + deltaScale,
146
- PCTResizeInfo.ScaleLimit.maxScaleLimit,
147
- ),
148
- PCTResizeInfo.ScaleLimit.minScaleLimit,
149
- )
150
- const spcWidth = Math.round(
151
- (PCTResizeInfo.ResizePCT.widthPCT *
152
- PCTResizeInfo.ResizeBasis.basisWidth) /
153
- 100,
154
- )
155
- const spcHeight = Math.round(
156
- (PCTResizeInfo.ResizePCT.heightPCT *
157
- PCTResizeInfo.ResizeBasis.basisHeight) /
158
- 100,
159
- )
160
- switch (index) {
161
- case 0:
162
- deltaX = width - spcWidth
163
- deltaY = height - spcHeight
164
- break
165
- case 1:
166
- deltaX = spcWidth - width
167
- deltaY = height - spcHeight
168
- break
169
- case 2:
170
- deltaX = spcWidth - width
171
- deltaY = spcHeight - height
172
- break
173
- case 3:
174
- deltaX = width - spcWidth
175
- deltaY = spcHeight - height
176
- break
177
- default:
178
- break
179
- }
180
- resize.width = spcWidth
181
- resize.height = spcHeight
182
- resize.deltaX = deltaX / pct
183
- resize.deltaY = deltaY / pct
184
- return resize
185
- }
186
- // 如果限制了宽/高不变,对应的width/height保持一致
187
- switch (index) {
188
- case 0:
189
- resize.width = freezeWidth ? width : width - deltaX * pct
190
- resize.height = freezeHeight ? height : height - deltaY * pct
191
- break
192
- case 1:
193
- resize.width = freezeWidth ? width : width + deltaX * pct
194
- resize.height = freezeHeight ? height : height - deltaY * pct
195
- break
196
- case 2:
197
- resize.width = freezeWidth ? width : width + deltaX * pct
198
- resize.height = freezeHeight ? height : height + deltaY * pct
199
- break
200
- case 3:
201
- resize.width = freezeWidth ? width : width - deltaX * pct
202
- resize.height = freezeHeight ? height : height + deltaY * pct
203
- break
204
- default:
205
- break
206
- }
207
- return resize
208
- }
209
- updateEdgePointByAnchors = () => {
210
- // https://github.com/didi/LogicFlow/issues/807
211
- // https://github.com/didi/LogicFlow/issues/875
212
- // 之前的做法,比如Rect是使用getRectResizeEdgePoint()计算边的point缩放后的位置
213
- // getRectResizeEdgePoint()考虑了瞄点在四条边以及在4个圆角的情况
214
- // 使用的是一种等比例缩放的模式,比如:
215
- // const pct = (y - beforeNode.y) / (beforeNode.height / 2 - radius)
216
- // afterPoint.y = afterNode.y + (afterNode.height / 2 - radius) * pct
217
- // 但是用户自定义的getDefaultAnchor()不一定是按照比例编写的
218
- // 它可能是 x: x + 20:每次缩放都会保持在x右边20的位置,因此用户自定义瞄点时,然后产生无法跟随的问题
219
- // 现在的做法是:直接获取用户自定义瞄点的位置,然后用这个位置作为边的新的起点,而不是自己进行计算
220
- const { id, anchors } = this.nodeModel
221
- const edges = this.getNodeEdges(id)
222
- // 更新边
223
- edges.sourceEdges.forEach((item) => {
224
- const anchorItem = anchors.find(
225
- (anchor) => anchor.id === item.sourceAnchorId,
226
- )
227
- if (anchorItem) {
228
- item.updateStartPoint({
229
- x: anchorItem.x,
230
- y: anchorItem.y,
231
- })
232
- }
233
- })
234
- edges.targetEdges.forEach((item) => {
235
- const anchorItem = anchors.find(
236
- (anchor) => anchor.id === item.targetAnchorId,
237
- )
238
- if (anchorItem) {
239
- item.updateEndPoint({
240
- x: anchorItem.x,
241
- y: anchorItem.y,
242
- })
243
- }
244
- })
245
- }
246
- // 矩形更新
247
- updateRect = ({ deltaX, deltaY }: VectorData) => {
248
- const { x, y, width, height, radius, PCTResizeInfo } = this
249
- .nodeModel as RectNodeModel
250
- const { minWidth, minHeight, maxWidth, maxHeight } = this
251
- .nodeModel as RectResizeModel
252
- // 更新中心点位置,更新文案位置
253
- const { index } = this
254
- const freezeWidth = minWidth === maxWidth
255
- const freezeHeight = minHeight === maxHeight
256
- const size = this.getResize({
257
- index,
258
- deltaX,
259
- deltaY,
260
- width,
261
- height,
262
- PCTResizeInfo,
263
- pct: 1,
264
- freezeWidth,
265
- freezeHeight,
266
- })
267
- // 限制放大缩小的最大最小范围
268
- if (
269
- size.width < minWidth ||
270
- size.width > maxWidth ||
271
- size.height < minHeight ||
272
- size.height > maxHeight
273
- ) {
274
- // 为了避免放到和缩小位置和鼠标不一致的问题
275
- this.dragHandler.cancelDrag()
276
- return
277
- }
278
- // 如果限制了宽/高不变,对应的x/y不产生位移
279
- this.updatePosition({
280
- deltaX: freezeWidth ? 0 : size.deltaX,
281
- deltaY: freezeHeight ? 0 : size.deltaY,
282
- })
283
- // 更新宽高
284
- this.nodeModel.width = size.width
285
- this.nodeModel.height = size.height
286
- this.nodeModel.setProperties({
287
- nodeSize: {
288
- width: size.width,
289
- height: size.height,
290
- },
291
- })
292
- // const edges = this.getNodeEdges(id)
293
- const beforeNode = {
294
- x,
295
- y,
296
- width,
297
- height,
298
- radius,
299
- }
300
- const afterNode = {
301
- x: this.nodeModel.x,
302
- y: this.nodeModel.y,
303
- width: this.nodeModel.width,
304
- height: this.nodeModel.height,
305
- radius,
306
- }
307
- // 更新边
308
- this.updateEdgePointByAnchors()
309
- this.eventEmit({
310
- deltaX,
311
- deltaY,
312
- beforeNode,
313
- afterNode,
314
- })
315
- }
316
- // 椭圆更新
317
- updateEllipse = ({ deltaX, deltaY }: VectorData) => {
318
- const { rx, ry, x, y, PCTResizeInfo } = this.nodeModel as EllipseNodeModel
319
- const { index } = this
320
- const { minWidth, minHeight, maxWidth, maxHeight } = this
321
- .nodeModel as RectResizeModel
322
- const freezeWidth = minWidth === maxWidth
323
- const freezeHeight = minHeight === maxHeight
324
- const width = rx
325
- const height = ry
326
- const size = this.getResize({
327
- index,
328
- deltaX,
329
- deltaY,
330
- width,
331
- height,
332
- PCTResizeInfo,
333
- pct: 1 / 2,
334
- freezeWidth,
335
- freezeHeight,
336
- })
337
- // 限制放大缩小的最大最小范围
338
- if (
339
- size.width < minWidth / 2 ||
340
- size.width > maxWidth / 2 ||
341
- size.height < minHeight / 2 ||
342
- size.height > maxHeight / 2
343
- ) {
344
- this.dragHandler.cancelDrag()
345
- return
346
- }
347
- // 更新中心点位置,更新文案位置
348
- // 如果限制了宽/高不变,对应的x/y不产生位移
349
- this.updatePosition({
350
- deltaX: freezeWidth ? 0 : size.deltaX,
351
- deltaY: freezeHeight ? 0 : size.deltaY,
352
- })
353
- // 更新rx ry,宽高为计算属性自动更新
354
- // @ts-ignore
355
- this.nodeModel.rx = size.width
356
- // @ts-ignore
357
- this.nodeModel.ry = size.height
358
- this.nodeModel.setProperties({
359
- nodeSize: {
360
- rx: size.width,
361
- ry: size.height,
362
- },
363
- })
364
-
365
- const beforeNode = {
366
- x,
367
- y,
368
- }
369
- const afterNode = {
370
- rx: size.width,
371
- ry: size.height,
372
- x: this.nodeModel.x,
373
- y: this.nodeModel.y,
374
- }
375
- // 更新边
376
- this.updateEdgePointByAnchors()
377
- this.eventEmit({
378
- deltaX,
379
- deltaY,
380
- beforeNode: {
381
- ...beforeNode,
382
- rx,
383
- ry,
384
- },
385
- afterNode,
386
- })
387
- }
388
- // 菱形更新
389
- updateDiamond = ({ deltaX, deltaY }: VectorData) => {
390
- const { rx, ry, x, y, PCTResizeInfo } = this.nodeModel as DiamondNodeModel
391
- const { index } = this
392
- const { minWidth, minHeight, maxWidth, maxHeight } = this
393
- .nodeModel as RectResizeModel
394
- const freezeWidth = minWidth === maxWidth
395
- const freezeHeight = minHeight === maxHeight
396
- const width = rx
397
- const height = ry
398
- const size = this.getResize({
399
- index,
400
- deltaX,
401
- deltaY,
402
- width,
403
- height,
404
- PCTResizeInfo,
405
- pct: 1 / 2,
406
- freezeWidth,
407
- freezeHeight,
408
- })
409
- // 限制放大缩小的最大最小范围
410
- if (
411
- size.width < minWidth / 2 ||
412
- size.width > maxWidth / 2 ||
413
- size.height < minHeight / 2 ||
414
- size.height > maxHeight / 2
415
- ) {
416
- this.dragHandler.cancelDrag()
417
- return
418
- }
419
- // 更新中心点位置,更新文案位置
420
- // 如果限制了宽/高不变,对应的x/y不产生位移
421
- this.updatePosition({
422
- deltaX: freezeWidth ? 0 : size.deltaX,
423
- deltaY: freezeHeight ? 0 : size.deltaY,
424
- })
425
- // 更新rx ry,宽高为计算属性自动更新
426
- // @ts-ignore
427
- this.nodeModel.rx = size.width
428
- // @ts-ignore
429
- this.nodeModel.ry = size.height
430
- this.nodeModel.setProperties({
431
- nodeSize: {
432
- rx: size.width,
433
- ry: size.height,
434
- },
435
- })
436
- const beforeNode = {
437
- x,
438
- y,
439
- rx,
440
- ry,
441
- }
442
- const afterNode = {
443
- rx: size.width,
444
- ry: size.height,
445
- x: this.nodeModel.x,
446
- y: this.nodeModel.y,
447
- }
448
- // 更新边
449
- this.updateEdgePointByAnchors()
450
- this.eventEmit({
451
- deltaX,
452
- deltaY,
453
- beforeNode,
454
- afterNode,
455
- })
456
- }
457
- eventEmit = ({ deltaX, deltaY, beforeNode, afterNode }: any) => {
458
- const { id, modelType, type } = this.nodeModel
459
- const oldNodeSize = {
460
- id,
461
- modelType,
462
- type,
463
- ...beforeNode,
464
- }
465
- const newNodeSize = {
466
- id,
467
- modelType,
468
- type,
469
- ...afterNode,
470
- }
471
- this.graphModel.eventCenter.emit('node:resize', {
472
- preData: oldNodeSize,
473
- data: newNodeSize,
474
- deltaX,
475
- deltaY,
476
- index: this.index,
477
- model: this.nodeModel,
478
- })
479
- }
480
- onDragging = ({ deltaX, deltaY }: VectorData) => {
481
- const { transformModel } = this.graphModel
482
- const { modelType } = this.nodeModel
483
- ;[deltaX, deltaY] = transformModel.fixDeltaXY(deltaX, deltaY)
484
- // html和矩形的计算方式是一样的,共用一个方法
485
- if (
486
- modelType === ModelType.RECT_NODE ||
487
- modelType === ModelType.HTML_NODE
488
- ) {
489
- this.updateRect({
490
- deltaX,
491
- deltaY,
492
- })
493
- // this.nodeModel.resize(deltaX, deltaY);
494
- } else if (modelType === ModelType.ELLIPSE_NODE) {
495
- this.updateEllipse({
496
- deltaX,
497
- deltaY,
498
- })
499
- } else if (modelType === ModelType.DIAMOND_NODE) {
500
- this.updateDiamond({
501
- deltaX,
502
- deltaY,
503
- })
504
- }
505
- }
506
- /**
507
- * 由于将拖拽放大缩小改成丝滑模式,这个时候需要在拖拽结束的时候,将节点的位置更新到grid上.
508
- */
509
- onDragEnd = () => {
510
- const { gridSize = 1 } = this.graphModel
511
- const x = gridSize * Math.round(this.nodeModel.x / gridSize)
512
- const y = gridSize * Math.round(this.nodeModel.y / gridSize)
513
- this.nodeModel.moveTo(x, y)
514
-
515
- // 先触发onDragging()->更新边->再触发用户自定义的getDefaultAnchor(),所以onDragging()拿到的anchors是滞后的
516
- // 为了正确设置最终的位置,应该在拖拽结束的时候,再设置一次边的Point位置,此时拿到的anchors是最新的
517
- this.updateEdgePointByAnchors()
518
- }
519
-
520
- render(): h.JSX.Element {
521
- const { x, y, index, model } = this.props
522
- const style = (model as RectResizeModel).getControlPointStyle()
523
- return (
524
- <g className={`lf-resize-control-${index}`}>
525
- <Rect
526
- className="lf-node-control"
527
- x={x}
528
- y={y}
529
- {...style}
530
- onMouseDown={this.dragHandler.handleMouseDown}
531
- />
532
- </g>
533
- )
534
- }
535
- }
536
-
537
- export default Control
@@ -1,76 +0,0 @@
1
- import { h, Component, Rect, BaseNodeModel, GraphModel } from '@logicflow/core'
2
- import Control from './Control'
3
- import { GroupNodeModel } from '../../materials/group'
4
-
5
- interface IControlGroupProps {
6
- model: BaseNodeModel
7
- graphModel: GraphModel
8
- }
9
-
10
- class ControlGroup extends Component<IControlGroupProps> {
11
- constructor() {
12
- super()
13
- this.state = {}
14
- }
15
-
16
- getResizeControl(): h.JSX.Element[] {
17
- const { model, graphModel } = this.props
18
- const { x, y, width, height } = model
19
- const box = {
20
- minX: x - width / 2,
21
- minY: y - height / 2,
22
- maxX: x + width / 2,
23
- maxY: y + height / 2,
24
- }
25
- const { minX, minY, maxX, maxY } = box
26
- const controlList = [
27
- // 左上角
28
- {
29
- x: minX,
30
- y: minY,
31
- },
32
- // 右上角
33
- {
34
- x: maxX,
35
- y: minY,
36
- },
37
- // 右下角
38
- {
39
- x: maxX,
40
- y: maxY,
41
- },
42
- // 左下角
43
- {
44
- x: minX,
45
- y: maxY,
46
- },
47
- ]
48
- return controlList.map((control, index) => (
49
- <Control
50
- index={index}
51
- {...control}
52
- model={model}
53
- graphModel={graphModel}
54
- />
55
- ))
56
- }
57
-
58
- // 一般节点被选中了会有outline, 先不用这个
59
- getGroupSolid() {
60
- const { model } = this.props
61
- const { x, y, width, height } = model
62
- const style = (model as GroupNodeModel).getResizeOutlineStyle()
63
- return <Rect {...style} x={x} y={y} width={width} height={height} />
64
- }
65
-
66
- render(): h.JSX.Element {
67
- return (
68
- <g className="lf-resize-control">
69
- {this.getGroupSolid()}
70
- {this.getResizeControl()}
71
- </g>
72
- )
73
- }
74
- }
75
-
76
- export default ControlGroup